diff --git a/Tests/LibCore/TestLibCoreFilePermissionsMask.cpp b/Tests/LibCore/TestLibCoreFilePermissionsMask.cpp index 20f1e9899e6..60cedb6d517 100644 --- a/Tests/LibCore/TestLibCoreFilePermissionsMask.cpp +++ b/Tests/LibCore/TestLibCoreFilePermissionsMask.cpp @@ -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) diff --git a/Userland/Libraries/LibCore/FilePermissionsMask.cpp b/Userland/Libraries/LibCore/FilePermissionsMask.cpp index fe759725a53..950d2023337 100644 --- a/Userland/Libraries/LibCore/FilePermissionsMask.cpp +++ b/Userland/Libraries/LibCore/FilePermissionsMask.cpp @@ -72,6 +72,8 @@ ErrorOr 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::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;