1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:17:36 +00:00

Userland: Don't leak objects when constructor arguments throw

Similar to d253beb2f7.

Found with Ali's clang-query script in Shell:

```
for $(find AK Userland -type f -name '*.h' -o -name '*.cpp') {
    in_parallel -j 12 -- clang-query -p \
    Build/lagom/compile_commands.json $it -c \
    'm cxxNewExpr(has(cxxConstructExpr(hasAnyArgument(hasDescendant( \
        allOf(isExpandedFromMacro("TRY"), stmtExpr()))))))' \
    } | grep -v 'matches.' | tee results
```
This commit is contained in:
Andrew Kaster 2023-12-13 15:45:32 -07:00 committed by Andrew Kaster
parent d253beb2f7
commit c145d5410c
4 changed files with 20 additions and 11 deletions

View file

@ -94,9 +94,9 @@ ErrorOr<NonnullOwnPtr<SetOptionCommand>> SetOptionCommand::from_string(StringVie
VERIFY(!name.is_empty());
return adopt_nonnull_own_or_enomem(new (nothrow) SetOptionCommand(
TRY(String::from_utf8(name.string_view().trim_whitespace())),
TRY(String::from_utf8(value.string_view().trim_whitespace()))));
auto name_string = TRY(String::from_utf8(name.string_view().trim_whitespace()));
auto value_string = TRY(String::from_utf8(value.string_view().trim_whitespace()));
return adopt_nonnull_own_or_enomem(new (nothrow) SetOptionCommand(name_string, value_string));
}
ErrorOr<String> SetOptionCommand::to_string() const
@ -259,10 +259,11 @@ ErrorOr<NonnullOwnPtr<IdCommand>> IdCommand::from_string(StringView command)
TRY(value.try_append(tokens[i]));
}
auto value_string = TRY(value.to_string());
if (tokens[1] == "name") {
return adopt_nonnull_own_or_enomem(new (nothrow) IdCommand(Type::Name, TRY(value.to_string())));
return adopt_nonnull_own_or_enomem(new (nothrow) IdCommand(Type::Name, value_string));
} else if (tokens[1] == "author") {
return adopt_nonnull_own_or_enomem(new (nothrow) IdCommand(Type::Author, TRY(value.to_string())));
return adopt_nonnull_own_or_enomem(new (nothrow) IdCommand(Type::Author, value_string));
}
VERIFY_NOT_REACHED();
}