]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests/unit/test_chkhash.c: add edge test cases
authorIker Pedrosa <ipedrosa@redhat.com>
Fri, 6 Feb 2026 15:18:52 +0000 (16:18 +0100)
committerAlejandro Colomar <foss+github@alejandro-colomar.es>
Tue, 17 Feb 2026 23:30:57 +0000 (00:30 +0100)
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
tests/unit/test_chkhash.c

index e7649e0471a27f5669bb0529d3b7bd0342fd40a5..e47fe0b1c2914d7a681e1fea4367876f2ba43d42 100644 (file)
@@ -152,6 +152,37 @@ test_is_valid_hash_ok_special(void **)
 }
 
 
+static void
+test_is_valid_hash_edge_salt_chars(void **)
+{
+       // SHA-512 with backslash in salt
+       assert_true(is_valid_hash("$6$sa\\lt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890./abcdefghijklmnopqrstuv"));
+
+       // SHA-512 with 'n' in salt
+       assert_true(is_valid_hash("$6$salnt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890./abcdefghijklmnopqrstuv"));
+
+       // SHA-256 with backslash in salt
+       assert_true(is_valid_hash("$5$sa\\lt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ"));
+
+       // SHA-256 with 'n' in salt
+       assert_true(is_valid_hash("$5$salnt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ"));
+}
+
+
+static void
+test_is_valid_hash_edge_account_locks(void **)
+{
+       // Complex ! prefix scenarios with various hash types should work
+       assert_true(is_valid_hash("!$2a$12$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ."));
+       assert_true(is_valid_hash("!$5$salt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ"));
+       assert_true(is_valid_hash("!$1$salt$abcdefghijklmnopqrstuv"));
+
+       // But invalid hashes with ! prefix should still fail
+       assert_false(is_valid_hash("!invalid"));
+       assert_false(is_valid_hash("!toolong"));
+}
+
+
 int
 main(void)
 {
@@ -163,6 +194,8 @@ main(void)
         cmocka_unit_test(test_is_valid_hash_ok_md5),
         cmocka_unit_test(test_is_valid_hash_ok_des),
         cmocka_unit_test(test_is_valid_hash_ok_special),
+        cmocka_unit_test(test_is_valid_hash_edge_salt_chars),
+        cmocka_unit_test(test_is_valid_hash_edge_account_locks),
     };
 
     return cmocka_run_group_tests(tests, NULL, NULL);