fix some double free, memory leaks, and seg faults

This commit is contained in:
2025-06-14 19:41:31 +01:00
parent 3a19b1519f
commit 3a1fc91352
16 changed files with 266 additions and 50 deletions

View File

@@ -245,12 +245,24 @@ char *unquote(char *str, size_t *decoded_len) {
return unescaped;
}
ParsedValue *parse_string(Token* token) {
ParsedValue *parse_string(Token* token, bool to_unquote) {
ParsedValue *parsedValue = checked_malloc(sizeof(ParsedValue));
parsedValue->type = AST_STRING;
ParsedString *parsedString = checked_malloc(sizeof(ParsedString));
parsedValue->data = parsedString;
parsedString->length = 0;
parsedString->string = unquote(token->value, &parsedString->length);
if (to_unquote) {
parsedString->length = 0;
parsedString->string = unquote(token->value, &parsedString->length);
} else {
parsedString->string = strdup(token->value);
parsedString->length = token->length;
}
return parsedValue;
}
void free_parsed_string(void *ptr) {
ParsedValue *parsedValue = ptr;
ParsedString *parsedString = parsedValue->data;
free(parsedString->string);
free(parsedString);
}

View File

@@ -15,6 +15,8 @@ char *swap_quotes(char *input, char quote);
char *unquote(char *str, size_t *decoded_len);
ParsedValue *parse_string(Token* token);
ParsedValue *parse_string(Token* token, bool to_unquote);
void free_parsed_string(void *ptr);
#endif // STRING_UTILS_H