From 197b4ada56a3d400787889bba6908faac113529e Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 2 Mar 2024 20:19:23 +0100 Subject: [PATCH] add multiple value test --- src/kds_s2000w_config.c | 20 ++++++++++++---- src/kds_s2000w_config.h | 1 + tests/kds_s2000w_read_config_tests.c | 35 ++++++++++++++++++++++++++++ tests/runtests.c | 2 ++ 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/kds_s2000w_config.c b/src/kds_s2000w_config.c index 5fb92ce..70c856a 100644 --- a/src/kds_s2000w_config.c +++ b/src/kds_s2000w_config.c @@ -18,10 +18,13 @@ typedef struct { void trim_key_whitespace_before(config_value* value) { int before = 0; - while(value->key[before] == ' ') { + while(value->key[before] == ' ' && before < value->value_length) { before++; } + if (value->value_length <= before) + return; + int new_length = value->key_length - before; char* new_value = malloc(sizeof(char) * new_length); memcpy(new_value, value->key + before, new_length); @@ -35,10 +38,13 @@ void trim_key_whitespace_before(config_value* value) void trim_key_whitespace_after(config_value* value) { int after = 0; - while(value->key[after] != ' ') { + while(value->key[after] != ' ' && after < value->value_length) { after++; } + if (value->value_length <= after) + return; + int new_length = after + 1; char* new_value = malloc(sizeof(char) * new_length); memcpy(new_value, value->key, new_length); @@ -59,10 +65,13 @@ void trim_key(config_value* value) void trim_value_whitespace_before(config_value* value) { int before = 0; - while(value->value[before] == ' ') { + while(value->value[before] == ' ' && before < value->value_length) { before++; } + if (value->value_length <= before) + return; + int new_length = value->value_length - before; char* new_value = malloc(sizeof(char) * new_length); memcpy(new_value, value->value + before, new_length); @@ -76,10 +85,13 @@ void trim_value_whitespace_before(config_value* value) void trim_value_whitespace_after(config_value* value) { int after = 0; - while(value->value[after] != ' ') { + while(value->value[after] != ' ' && after < value->value_length) { after++; } + if (value->value_length <= after) + return; + int new_length = after + 1; char* new_value = malloc(sizeof(char) * new_length); memcpy(new_value, value->value, new_length); diff --git a/src/kds_s2000w_config.h b/src/kds_s2000w_config.h index 80bb490..5187979 100644 --- a/src/kds_s2000w_config.h +++ b/src/kds_s2000w_config.h @@ -3,6 +3,7 @@ typedef struct { char* scanner_url; + char* username; } program_config; void loadConfig(program_config* config, const char* config_stream); diff --git a/tests/kds_s2000w_read_config_tests.c b/tests/kds_s2000w_read_config_tests.c index bf34800..a904d21 100644 --- a/tests/kds_s2000w_read_config_tests.c +++ b/tests/kds_s2000w_read_config_tests.c @@ -17,6 +17,41 @@ START_TEST(kds_s2000w_config_read_parameter) } END_TEST +START_TEST(kds_s2000w_config_read_parameters_without_trim) +{ + const char* input_stream = "scanner_url =http://scanner.example.com\n"; + + program_config* config = malloc(sizeof(program_config)); + loadConfig(config, input_stream); + + ck_assert_str_eq(config->scanner_url, "http://scanner.example.com"); + + free(config->scanner_url); + config->scanner_url = NULL; + free(config); + config = NULL; +} +END_TEST + +START_TEST(kds_s2000w_config_multiple_parameters) +{ + const char* input_stream = "scanner_url=http://scanner.example.com\nusername=Mustermann\n"; + + program_config* config = malloc(sizeof(program_config)); + loadConfig(config, input_stream); + + ck_assert_str_eq(config->scanner_url, "http://scanner.example.com"); + ck_assert_str_eq(config->username, "Mustermann"); + + free(config->scanner_url); + config->scanner_url = NULL; + free(config->username); + config->username = NULL; + free(config); + config = NULL; +} +END_TEST + START_TEST(kds_s2000w_config_read_empty_config) { const char* input_stream = ""; diff --git a/tests/runtests.c b/tests/runtests.c index 2e79947..3f79ecb 100644 --- a/tests/runtests.c +++ b/tests/runtests.c @@ -53,6 +53,8 @@ Suite* config_read() TCase* net_config_read = tcase_create("read config"); tcase_add_test(net_config_read, kds_s2000w_config_read_empty_config); tcase_add_test(net_config_read, kds_s2000w_config_read_parameter); + tcase_add_test(net_config_read, kds_s2000w_config_read_parameters_without_trim); + tcase_add_test(net_config_read, kds_s2000w_config_multiple_parameters); suite_add_tcase(read_config, net_config_read); return read_config; -- 2.39.5