Skip to content

Commit 4b4c942

Browse files
committed
Make sure filter_pattern can fit in test_filter
1 parent 726f5ee commit 4b4c942

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

include/rktest/rktest.h

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -921,12 +921,29 @@ static rktest_config_t parse_args(int argc, const char* argv[]) {
921921
else if (string_starts_with(arg, "--rktest_filter=")) {
922922
const char* filter_pattern = arg + strlen("--rktest_filter=");
923923
const size_t filter_len = strlen(filter_pattern);
924-
if (filter_len > RKTEST_MAX_FILTER_LENGTH) {
925-
fprintf(stderr, "Error: filter pattern too long. Max length is (%d)", RKTEST_MAX_FILTER_LENGTH);
924+
const size_t max_filter_len = RKTEST_MAX_FILTER_LENGTH - 1;
925+
if (filter_len > max_filter_len) {
926+
fprintf(stderr, "Error: filter pattern too long. Max length is (%lu)", max_filter_len);
926927
fprintf(stderr, "filter pattern = \"%s\"", filter_pattern);
927928
exit(1);
928929
}
929-
strncpy(config.test_filter, filter_pattern, filter_len);
930+
// strncpy will copy all bytes up to a NULL in the source or until it
931+
// reaches the size in the third param.
932+
//
933+
// This means it will not add a NULL to the end of the destination if the
934+
// source does not have one.
935+
//
936+
// Examples from the strncpy man page are useful,
937+
//
938+
// strncpy(buf, "1", 5); // { '1', 0, 0, 0, 0 }
939+
// strncpy(buf, "1234", 5); // { '1', '2', '3', '4', 0 }
940+
// strncpy(buf, "12345", 5); // { '1', '2', '3', '4', '5' }
941+
// strncpy(buf, "123456", 5); // { '1', '2', '3', '4', '5' }
942+
//
943+
// So if test_filter is a char[256], then max_filter_len will be 255 and if
944+
// filter_pattern is also 255, then it will have one character left which
945+
// strncpy will make a NULL.
946+
strncpy(config.test_filter, filter_pattern, max_filter_len);
930947
}
931948

932949
else if (string_starts_with(arg, "--rktest_print_time=")) {

0 commit comments

Comments
 (0)