diff --git a/rpcs3/Emu/NP/clans_client.cpp b/rpcs3/Emu/NP/clans_client.cpp index ca4517d04725..f6f26c07dfa2 100644 --- a/rpcs3/Emu/NP/clans_client.cpp +++ b/rpcs3/Emu/NP/clans_client.cpp @@ -932,11 +932,14 @@ namespace clan pugi::xml_node status = clan.append_child("bin-attr1"sv); + const u32 bin_data_size = static_cast(info.binData1Size); + if (bin_data_size > sizeof(info.binAttr1)) + return SCE_NP_CLANS_ERROR_INVALID_ARGUMENT; + byte bin_attr_1[SCE_NP_CLANS_MEMBER_BINARY_ATTRIBUTE1_MAX_SIZE * 2 + 1] = {0}; - uint32_t bin_attr_1_size = UINT32_MAX; - Base64_Encode_NoNl(info.binAttr1, info.binData1Size, bin_attr_1, &bin_attr_1_size); + uint32_t bin_attr_1_size = sizeof(bin_attr_1); - if (bin_attr_1_size == UINT32_MAX) + if (Base64_Encode_NoNl(info.binAttr1, bin_data_size, bin_attr_1, &bin_attr_1_size) != 0) return SCE_NP_CLANS_ERROR_INVALID_ARGUMENT; // `reinterpret_cast` used to let the compiler select the correct overload of `set`