1
0
Fork 0
mirror of https://github.com/DarkMatterCore/nxdumptool.git synced 2024-11-22 18:26:39 +00:00

title: handle NACPs with empty language entries.

Leftover ns application records for factory software yield NACP structs with no identifying strings.

I wasn't expecting this to be a thing.
This commit is contained in:
Pablo Curiel 2024-01-13 21:25:02 +01:00
parent 62c29308db
commit 38ff475d9e

View file

@ -1326,7 +1326,7 @@ static bool titleReallocateApplicationMetadata(u32 extra_app_count, bool is_syst
{ {
if (cur_app_metadata->icon) free(cur_app_metadata->icon); if (cur_app_metadata->icon) free(cur_app_metadata->icon);
free(cur_app_metadata); free(cur_app_metadata);
cur_app_metadata = NULL; cached_app_metadata[cached_app_metadata_count + i] = NULL;
} }
} }
} }
@ -1342,7 +1342,7 @@ static bool titleReallocateApplicationMetadata(u32 extra_app_count, bool is_syst
tmp_app_metadata = NULL; tmp_app_metadata = NULL;
/* Clear new application metadata pointer array area (if needed). */ /* Clear new application metadata pointer array area (if needed). */
if (!free_entries && extra_app_count) memset(cached_app_metadata + cached_app_metadata_count, 0, extra_app_count * sizeof(TitleApplicationMetadata*)); if (realloc_app_count > cached_app_metadata_count) memset(cached_app_metadata + cached_app_metadata_count, 0, extra_app_count * sizeof(TitleApplicationMetadata*));
} else { } else {
LOG_MSG_ERROR("Failed to reallocate application metadata pointer array! (%u element[s]).", realloc_app_count); LOG_MSG_ERROR("Failed to reallocate application metadata pointer array! (%u element[s]).", realloc_app_count);
goto end; goto end;
@ -1542,7 +1542,7 @@ static bool titleReallocateTitleInfoFromStorage(TitleStorage *title_storage, u32
{ {
if (cur_title_info->content_infos) free(cur_title_info->content_infos); if (cur_title_info->content_infos) free(cur_title_info->content_infos);
free(cur_title_info); free(cur_title_info);
cur_title_info = NULL; title_info[title_count + i] = NULL;
} }
} }
} }
@ -1558,7 +1558,7 @@ static bool titleReallocateTitleInfoFromStorage(TitleStorage *title_storage, u32
tmp_title_info = NULL; tmp_title_info = NULL;
/* Clear new title info pointer array area (if needed). */ /* Clear new title info pointer array area (if needed). */
if (!free_entries && extra_title_count) memset(title_info + title_count, 0, extra_title_count * sizeof(TitleInfo*)); if (realloc_title_count > title_count) memset(title_info + title_count, 0, extra_title_count * sizeof(TitleInfo*));
} else { } else {
LOG_MSG_ERROR("Failed to reallocate title info pointer array! (%u element[s]).", realloc_title_count); LOG_MSG_ERROR("Failed to reallocate title info pointer array! (%u element[s]).", realloc_title_count);
goto end; goto end;
@ -1870,9 +1870,17 @@ static bool titleRetrieveUserApplicationMetadataByTitleId(u64 title_id, TitleApp
/* Copy data. */ /* Copy data. */
out->title_id = title_id; out->title_id = title_id;
if (lang_entry)
{
memcpy(&(out->lang_entry), lang_entry, sizeof(NacpLanguageEntry)); memcpy(&(out->lang_entry), lang_entry, sizeof(NacpLanguageEntry));
utilsTrimString(out->lang_entry.name); utilsTrimString(out->lang_entry.name);
utilsTrimString(out->lang_entry.author); utilsTrimString(out->lang_entry.author);
} else {
/* Yes, this can happen -- NACPs with empty language entries are a thing, somehow. */
sprintf(out->lang_entry.name, "Unknown");
sprintf(out->lang_entry.author, "Unknown");
LOG_DATA_DEBUG(&(g_nsAppControlData->nacp), sizeof(NacpStruct), "NACP dump (ID %016lX):", title_id);
}
out->icon_size = icon_size; out->icon_size = icon_size;
out->icon = icon; out->icon = icon;