Skip to content

Commit

Permalink
More checks in ParamSFO reader. Only problem left is that the strings…
Browse files Browse the repository at this point in the history
… are null terminated and can walk off the buffer.
  • Loading branch information
hrydgard committed Oct 8, 2021
1 parent ddc0f08 commit 322a8a8
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions Core/ELF/ParamSFO.cpp
Expand Up @@ -107,33 +107,41 @@ bool ParamSFOData::ReadSFO(const u8 *paramsfo, size_t size) {
return false;
}

const u8 *key_start = paramsfo + header->key_table_start;
const u8 *data_start = paramsfo + header->data_table_start;

for (u32 i = 0; i < header->index_table_entries; i++)
{
const char *key = (const char *)(key_start + indexTables[i].key_table_offset);
size_t key_offset = header->key_table_start + indexTables[i].key_table_offset;
if (key_offset >= size) {
return false;
}
size_t data_offset = header->data_table_start + indexTables[i].data_table_offset;
if (data_offset >= size) {
return false;
}

const char *key = (const char *)(paramsfo + key_offset);
switch (indexTables[i].param_fmt) {
case 0x0404:
{
// Unsigned int
const u32_le *data = (const u32_le *)(data_start + indexTables[i].data_table_offset);
const u32_le *data = (const u32_le *)(paramsfo + data_offset);
SetValue(key, *data, indexTables[i].param_max_len);
VERBOSE_LOG(LOADER, "%s %08x", key, *data);
}
break;
case 0x0004:
// Special format UTF-8
{
const u8 *utfdata = (const u8 *)(data_start + indexTables[i].data_table_offset);
const u8 *utfdata = (const u8 *)(paramsfo + data_offset);
VERBOSE_LOG(LOADER, "%s %s", key, utfdata);
SetValue(key, utfdata, indexTables[i].param_len, indexTables[i].param_max_len);
}
break;
case 0x0204:
// Regular UTF-8
{
const char *utfdata = (const char *)(data_start + indexTables[i].data_table_offset);
const char *utfdata = (const char *)(paramsfo + data_offset);
VERBOSE_LOG(LOADER, "%s %s", key, utfdata);
SetValue(key, std::string(utfdata /*, indexTables[i].param_len*/), indexTables[i].param_max_len);
}
Expand Down

0 comments on commit 322a8a8

Please sign in to comment.