LibCore: Improve handling of parsing errors in FilePermissionsMask

This commit is contained in:
Xavier Defrang 2022-01-22 16:34:09 +01:00 committed by Brian Gianforcaro
parent 30f58de800
commit 070d70848f
Notes: sideshowbarker 2024-07-17 20:19:55 +09:00
2 changed files with 7 additions and 1 deletions

View file

@ -74,15 +74,19 @@ TEST_CASE(file_permission_mask_from_symbolic_notation)
mask = Core::FilePermissionsMask::from_symbolic_notation("z+rw"sv);
EXPECT(mask.is_error());
EXPECT(mask.error().string_literal().starts_with("invalid class"));
mask = Core::FilePermissionsMask::from_symbolic_notation("u*rw"sv);
EXPECT(mask.is_error());
EXPECT(mask.error().string_literal().starts_with("invalid operation"));
mask = Core::FilePermissionsMask::from_symbolic_notation("u+rz"sv);
EXPECT(mask.is_error());
EXPECT(mask.error().string_literal().starts_with("invalid symbolic permission"));
mask = Core::FilePermissionsMask::from_symbolic_notation("u+rw;g+rw"sv);
EXPECT(mask.is_error());
EXPECT(mask.error().string_literal().starts_with("invalid symbolic permission"));
}
TEST_CASE(file_permission_mask_parse)

View file

@ -72,6 +72,8 @@ ErrorOr<FilePermissionsMask> FilePermissionsMask::from_symbolic_notation(StringV
operation = Operation::Remove;
else if (ch == '=')
operation = Operation::Assign;
else if (classes == 0)
return Error::from_string_literal("invalid class: expected 'u', 'g', 'o' or 'a'"sv);
else
return Error::from_string_literal("invalid operation: expected '+', '-' or '='"sv);
@ -104,7 +106,7 @@ ErrorOr<FilePermissionsMask> FilePermissionsMask::from_symbolic_notation(StringV
else if (ch == 'x')
write_bits = 1;
else
return Error::from_string_literal("invalid symbolic permission"sv);
return Error::from_string_literal("invalid symbolic permission: expected 'r', 'w' or 'x'"sv);
mode_t clear_bits = operation == Operation::Assign ? 7 : write_bits;