From e6b2ae3dce070731c8dd3c3423a27ba131fe14d3 Mon Sep 17 00:00:00 2001 From: al3w0f205 Date: Fri, 23 Oct 2026 11:34:15 -0500 Subject: [PATCH 1/3] test(libSceSaveData.native): cover null convert struct and directory name validation --- core/libs/tests/GuestSaveDataConvert.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/libs/tests/GuestSaveDataConvert.cpp b/core/libs/tests/GuestSaveDataConvert.cpp index df8f6743ce..3680a14dde 100644 --- a/core/libs/tests/GuestSaveDataConvert.cpp +++ b/core/libs/tests/GuestSaveDataConvert.cpp @@ -59,6 +59,9 @@ int main() { float progress = 0.0f; Check(sceSaveDataGetConvertProgress(&progress) == SaveDataErrorNotInitialized, "query before initialize fails with not initialized"); + Check(sceSaveDataConvert(nullptr) == SaveDataErrorParameter, "null convert pointer is rejected"); + SaveDataConvert nullDir{}; + Check(sceSaveDataConvert(&nullDir) == SaveDataErrorParameter, "null dir_name is rejected"); Check(sceSaveDataInitialize3(nullptr) == 0, "SaveData initializes"); Check(sceSaveDataGetConvertProgress(&progress) == 0, "get convert progress succeeds"); Check(progress == 0.0f, "convert progress reports 0.0f initially"); From 8d1059abdeb9b424d755269572e9c06404db2a87 Mon Sep 17 00:00:00 2001 From: Dean Galvin Date: Sun, 25 Oct 2026 21:06:20 +1300 Subject: [PATCH 2/3] test(savedata): assert the runtime_error thrown for null convert inputs --- core/libs/tests/GuestSaveDataConvert.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/libs/tests/GuestSaveDataConvert.cpp b/core/libs/tests/GuestSaveDataConvert.cpp index 3680a14dde..86af2c7a45 100644 --- a/core/libs/tests/GuestSaveDataConvert.cpp +++ b/core/libs/tests/GuestSaveDataConvert.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,15 @@ void Check(bool condition, const std::string& what) { ++failures; } +bool Throws(const SaveDataConvert* convert) { + try { + sceSaveDataConvert(convert); + } catch (const std::runtime_error&) { + return true; + } + return false; +} + int Convert(const char* data, std::size_t size) { SceSaveDataDirName name{}; std::memcpy(name.data, data, size); @@ -59,9 +69,9 @@ int main() { float progress = 0.0f; Check(sceSaveDataGetConvertProgress(&progress) == SaveDataErrorNotInitialized, "query before initialize fails with not initialized"); - Check(sceSaveDataConvert(nullptr) == SaveDataErrorParameter, "null convert pointer is rejected"); + Check(Throws(nullptr), "null convert pointer throws"); SaveDataConvert nullDir{}; - Check(sceSaveDataConvert(&nullDir) == SaveDataErrorParameter, "null dir_name is rejected"); + Check(Throws(&nullDir), "null dir_name throws"); Check(sceSaveDataInitialize3(nullptr) == 0, "SaveData initializes"); Check(sceSaveDataGetConvertProgress(&progress) == 0, "get convert progress succeeds"); Check(progress == 0.0f, "convert progress reports 0.0f initially"); From f30a7444a89ac8801d3ebf3f1e7665446bd06496 Mon Sep 17 00:00:00 2001 From: Dean Galvin Date: Mon, 26 Oct 2026 03:24:03 +1300 Subject: [PATCH 3/3] test(savedata): unwind the null-input throw on Windows guest_savedata_convert catches the runtime_error that the PRX raises for null arguments, so the target needs configure_windows_unwind like the other savedata targets that catch; without it the throw terminates the process on MinGW. --- core/libs/prx/libSceSaveData.native/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/libs/prx/libSceSaveData.native/CMakeLists.txt b/core/libs/prx/libSceSaveData.native/CMakeLists.txt index 6b03a2c86c..6cda0de4de 100644 --- a/core/libs/prx/libSceSaveData.native/CMakeLists.txt +++ b/core/libs/prx/libSceSaveData.native/CMakeLists.txt @@ -25,6 +25,7 @@ if(BUILD_TESTING) add_test_executable(guest_savedata_convert_tests ${LIBS_INCLUDE_DIR}/tests/GuestSaveDataConvert.cpp) target_include_directories(guest_savedata_convert_tests PRIVATE ${LIBS_INCLUDE_DIR}) target_link_libraries(guest_savedata_convert_tests PRIVATE libSceSaveData.native libc) + configure_windows_unwind(guest_savedata_convert_tests) add_test(NAME guest_savedata_convert COMMAND guest_savedata_convert_tests) if(WIN32) set_tests_properties(guest_savedata_convert PROPERTIES ENVIRONMENT_MODIFICATION