fix(bug-1560): symlink-escape test asserted the wrong error string
test_recordstart_symlink_escape_replies_error expected "invalid record
file name" (the -EINVAL string), but sched_validate_record_filename()'s
canonical-path containment check has always, correctly, returned
-EACCES ("permission denied accessing record file") for a symlink
escaping record_dir -- confirmed against test_recording_path_validation.c's
own direct unit test for the identical scenario, which already asserts
-EACCES and has always passed.
Not environment-dependent as originally suspected (this project's
buglog carried it as a uid-1000-vs-root permission-check-ordering
theory across 7+ sightings since Aug 15) -- it fails identically
regardless of uid, since escape-containment and filesystem-permission
errors were never actually conflated in production code, only in this
test's assertion. No production code changed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QxaSzHRB7pmYFp4cVnwkA
This commit is contained in:
parent
6326109798
commit
dfcd345ded
1 changed files with 21 additions and 2 deletions
|
|
@ -826,7 +826,25 @@ static void test_recordstart_symlink_escape_replies_error(void)
|
||||||
* '/' nor the ".." rule -- only the canonical-path containment check
|
* '/' nor the ".." rule -- only the canonical-path containment check
|
||||||
* on the pre-existing symlink's resolved target catches this. Proven
|
* on the pre-existing symlink's resolved target catches this. Proven
|
||||||
* here through the real admin request path, not just at the internal
|
* here through the real admin request path, not just at the internal
|
||||||
* sched_validate_record_filename() level. */
|
* sched_validate_record_filename() level.
|
||||||
|
*
|
||||||
|
* bug-1560: a canonical-path containment failure is deliberately
|
||||||
|
* -EACCES, not -EINVAL (sched_validate_record_filename(),
|
||||||
|
* recording.c's path_is_contained() branch) -- -EINVAL is reserved
|
||||||
|
* for a malformed filename rejected before any filesystem access
|
||||||
|
* (Step 1: '/' or ".." in the bare filename, see
|
||||||
|
* test_recordstart_dotdot_filename_replies_error above). The sibling
|
||||||
|
* unit test at the sched_validate_record_filename() level already
|
||||||
|
* asserts -EACCES for this exact scenario
|
||||||
|
* (test_symlink_inside_record_dir_escaping_outside_is_rejected,
|
||||||
|
* test_recording_path_validation.c) -- this test's own expected
|
||||||
|
* error string below was simply wrong, asserting the -EINVAL string
|
||||||
|
* against what is, and always was, an -EACCES rejection. Not an
|
||||||
|
* environment-dependent permission-check ordering issue as
|
||||||
|
* originally suspected: this fails identically as uid 0 or uid
|
||||||
|
* 1000, since escape-containment and filesystem-permission errors
|
||||||
|
* were never actually conflated in production code -- only in this
|
||||||
|
* test's assertion. */
|
||||||
snprintf(outside_target, sizeof(outside_target), "%s/secret", outside_dir);
|
snprintf(outside_target, sizeof(outside_target), "%s/secret", outside_dir);
|
||||||
touch_file(outside_target);
|
touch_file(outside_target);
|
||||||
|
|
||||||
|
|
@ -847,7 +865,8 @@ static void test_recordstart_symlink_escape_replies_error(void)
|
||||||
TEST_ASSERT_EQUAL_INT(1, g_reply_calls);
|
TEST_ASSERT_EQUAL_INT(1, g_reply_calls);
|
||||||
TEST_ASSERT_FALSE(g_last_ok);
|
TEST_ASSERT_FALSE(g_last_ok);
|
||||||
TEST_ASSERT_FALSE(g_last_error_null);
|
TEST_ASSERT_FALSE(g_last_error_null);
|
||||||
TEST_ASSERT_EQUAL_STRING("invalid record file name", g_last_error);
|
TEST_ASSERT_EQUAL_STRING("permission denied accessing record file",
|
||||||
|
g_last_error);
|
||||||
TEST_ASSERT_FALSE(g_last_recording);
|
TEST_ASSERT_FALSE(g_last_recording);
|
||||||
TEST_ASSERT_TRUE(g_last_file_null);
|
TEST_ASSERT_TRUE(g_last_file_null);
|
||||||
TEST_ASSERT_EQUAL_UINT64(0, g_last_event_count);
|
TEST_ASSERT_EQUAL_UINT64(0, g_last_event_count);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue