Skip to content

Commit 98c8ca9

Browse files
committed
fix mem leak due to not freeing SettingType::Color
1 parent 44c9b12 commit 98c8ca9

File tree

2 files changed

+39
-13
lines changed

2 files changed

+39
-13
lines changed

src/utils/SettingsUtil.cpp

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -524,18 +524,44 @@ static void FreeStructData(const StructInfo* info, u8* base) {
524524
for (size_t i = 0; i < info->fieldCount; i++) {
525525
const FieldInfo& field = info->fields[i];
526526
u8* fieldPtr = base + field.offset;
527-
if (SettingType::Struct == field.type || SettingType::Prerelease == field.type) {
528-
FreeStructData(GetSubstruct(field), fieldPtr);
529-
} else if (SettingType::Array == field.type) {
530-
FreeArray(*(Vec<void*>**)fieldPtr, field);
531-
} else if (SettingType::String == field.type) {
532-
void* m = *((void**)fieldPtr);
533-
free(m);
534-
} else if (SettingType::FloatArray == field.type || SettingType::IntArray == field.type) {
535-
Vec<int>* v = *((Vec<int>**)fieldPtr);
536-
delete v;
537-
} else if (SettingType::StringArray == field.type || SettingType::ColorArray == field.type) {
538-
FreeUtf8StringArray(*(Vec<char*>**)fieldPtr);
527+
switch (field.type) {
528+
case SettingType::Bool:
529+
case SettingType::Int:
530+
case SettingType::Float:
531+
case SettingType::Comment:
532+
// nothing to free
533+
break;
534+
case SettingType::Struct:
535+
case SettingType::Prerelease: {
536+
const StructInfo* substruct = GetSubstruct(field);
537+
FreeStructData(substruct, fieldPtr);
538+
break;
539+
}
540+
case SettingType::Array: {
541+
Vec<void*>* array = *(Vec<void*>**)fieldPtr;
542+
FreeArray(array, field);
543+
break;
544+
}
545+
case SettingType::Color:
546+
case SettingType::String: {
547+
void* str = *((void**)fieldPtr);
548+
free(str);
549+
break;
550+
}
551+
case SettingType::FloatArray:
552+
case SettingType::IntArray: {
553+
Vec<int>* vec = *((Vec<int>**)fieldPtr);
554+
delete vec;
555+
break;
556+
}
557+
case SettingType::StringArray:
558+
case SettingType::ColorArray: {
559+
Vec<char*>* strArray = *(Vec<char*>**)fieldPtr;
560+
FreeUtf8StringArray(strArray);
561+
break;
562+
}
563+
default:
564+
break;
539565
}
540566
}
541567
}

src/utils/WinUtil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3194,4 +3194,4 @@ bool IsPEFileSigned(const char* filePath) {
31943194
} else {
31953195
return false; // File is not signed or signature is not valid
31963196
}
3197-
}
3197+
}

0 commit comments

Comments
 (0)