Skip to content
This repository was archived by the owner on Jan 26, 2026. It is now read-only.

Commit 45878b1

Browse files
Jakujecryptomilk
authored andcommitted
tests: Check behavior of match_pattern()
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org> (cherry picked from commit c7cacf9)
1 parent 21adb54 commit 45878b1

1 file changed

Lines changed: 86 additions & 0 deletions

File tree

tests/unittests/torture_config.c

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include "torture.h"
66
#include "libssh/options.h"
77
#include "libssh/session.h"
8+
#include "libssh/config_parser.h"
9+
#include "match.c"
810

911
extern LIBSSH_THREAD int ssh_log_level;
1012

@@ -907,6 +909,89 @@ static void torture_config_pubkeyacceptedkeytypes(void **state)
907909
}
908910
}
909911

912+
/* match_pattern() sanity tests
913+
*/
914+
static void torture_config_match_pattern(void **state)
915+
{
916+
int rv = 0;
917+
918+
(void) state;
919+
920+
/* Simple test "a" matches "a" */
921+
rv = match_pattern("a", "a", MAX_MATCH_RECURSION);
922+
assert_int_equal(rv, 1);
923+
924+
/* Simple test "a" does not match "b" */
925+
rv = match_pattern("a", "b", MAX_MATCH_RECURSION);
926+
assert_int_equal(rv, 0);
927+
928+
/* NULL arguments are correctly handled */
929+
rv = match_pattern("a", NULL, MAX_MATCH_RECURSION);
930+
assert_int_equal(rv, 0);
931+
rv = match_pattern(NULL, "a", MAX_MATCH_RECURSION);
932+
assert_int_equal(rv, 0);
933+
934+
/* Simple wildcard ? is handled in pattern */
935+
rv = match_pattern("a", "?", MAX_MATCH_RECURSION);
936+
assert_int_equal(rv, 1);
937+
rv = match_pattern("aa", "?", MAX_MATCH_RECURSION);
938+
assert_int_equal(rv, 0);
939+
rv = match_pattern("?", "a", MAX_MATCH_RECURSION); /* Wildcard in search string */
940+
assert_int_equal(rv, 0);
941+
rv = match_pattern("?", "?", MAX_MATCH_RECURSION);
942+
assert_int_equal(rv, 1);
943+
944+
/* Simple wildcard * is handled in pattern */
945+
rv = match_pattern("a", "*", MAX_MATCH_RECURSION);
946+
assert_int_equal(rv, 1);
947+
rv = match_pattern("aa", "*", MAX_MATCH_RECURSION);
948+
assert_int_equal(rv, 1);
949+
rv = match_pattern("*", "a", MAX_MATCH_RECURSION); /* Wildcard in search string */
950+
assert_int_equal(rv, 0);
951+
rv = match_pattern("*", "*", MAX_MATCH_RECURSION);
952+
assert_int_equal(rv, 1);
953+
954+
/* More complicated patterns */
955+
rv = match_pattern("a", "*a", MAX_MATCH_RECURSION);
956+
assert_int_equal(rv, 1);
957+
rv = match_pattern("a", "a*", MAX_MATCH_RECURSION);
958+
assert_int_equal(rv, 1);
959+
rv = match_pattern("abababc", "*abc", MAX_MATCH_RECURSION);
960+
assert_int_equal(rv, 1);
961+
rv = match_pattern("ababababca", "*abc", MAX_MATCH_RECURSION);
962+
assert_int_equal(rv, 0);
963+
rv = match_pattern("ababababca", "*abc*", MAX_MATCH_RECURSION);
964+
assert_int_equal(rv, 1);
965+
966+
/* Multiple wildcards in row */
967+
rv = match_pattern("aa", "??", MAX_MATCH_RECURSION);
968+
assert_int_equal(rv, 1);
969+
rv = match_pattern("bba", "??a", MAX_MATCH_RECURSION);
970+
assert_int_equal(rv, 1);
971+
rv = match_pattern("aaa", "**a", MAX_MATCH_RECURSION);
972+
assert_int_equal(rv, 1);
973+
rv = match_pattern("bbb", "**a", MAX_MATCH_RECURSION);
974+
assert_int_equal(rv, 0);
975+
976+
/* Consecutive asterisks do not make sense and do not need to recurse */
977+
rv = match_pattern("hostname", "**********pattern", 5);
978+
assert_int_equal(rv, 0);
979+
rv = match_pattern("hostname", "pattern**********", 5);
980+
assert_int_equal(rv, 0);
981+
rv = match_pattern("pattern", "***********pattern", 5);
982+
assert_int_equal(rv, 1);
983+
rv = match_pattern("pattern", "pattern***********", 5);
984+
assert_int_equal(rv, 1);
985+
986+
/* Limit the maximum recursion */
987+
rv = match_pattern("hostname", "*p*a*t*t*e*r*n*", 5);
988+
assert_int_equal(rv, 0);
989+
rv = match_pattern("pattern", "*p*a*t*t*e*r*n*", 5); /* Too much recursion */
990+
assert_int_equal(rv, 0);
991+
992+
}
993+
994+
910995
int torture_run_tests(void) {
911996
int rc;
912997
struct CMUnitTest tests[] = {
@@ -920,6 +1005,7 @@ int torture_run_tests(void) {
9201005
cmocka_unit_test(torture_config_proxyjump),
9211006
cmocka_unit_test(torture_config_rekey),
9221007
cmocka_unit_test(torture_config_pubkeyacceptedkeytypes),
1008+
cmocka_unit_test(torture_config_match_pattern),
9231009
};
9241010

9251011

0 commit comments

Comments
 (0)