diff options
| -rw-r--r-- | src/blogc-git-receiver/shell-command-parser.c | 25 | ||||
| -rw-r--r-- | src/blogc-git-receiver/shell-command-parser.h | 1 | ||||
| -rw-r--r-- | src/blogc-git-receiver/shell.c | 2 | ||||
| -rw-r--r-- | src/common/utils.c | 24 | ||||
| -rw-r--r-- | src/common/utils.h | 5 | ||||
| -rw-r--r-- | tests/blogc-git-receiver/check_shell_command_parser.c | 29 | ||||
| -rw-r--r-- | tests/common/check_utils.c | 31 | 
7 files changed, 61 insertions, 56 deletions
| diff --git a/src/blogc-git-receiver/shell-command-parser.c b/src/blogc-git-receiver/shell-command-parser.c index 0c867b8..4cfdec8 100644 --- a/src/blogc-git-receiver/shell-command-parser.c +++ b/src/blogc-git-receiver/shell-command-parser.c @@ -99,28 +99,3 @@ error:      bc_string_free(rv, true);      return NULL;  } - - -char* -bgr_shell_quote(const char *command) -{ -    // this does not really belongs here, but function is very small -    bc_string_t *rv = bc_string_new(); -    bc_string_append_c(rv, '\''); -    if (command != NULL) { -        for (size_t i = 0; i < strlen(command); i++) { -            switch (command[i]) { -                case '!': -                    bc_string_append(rv, "'\\!'"); -                    break; -                case '\'': -                    bc_string_append(rv, "'\\''"); -                    break; -                default: -                    bc_string_append_c(rv, command[i]); -            } -        } -    } -    bc_string_append_c(rv, '\''); -    return bc_string_free(rv, false); -} diff --git a/src/blogc-git-receiver/shell-command-parser.h b/src/blogc-git-receiver/shell-command-parser.h index 47054cb..652d671 100644 --- a/src/blogc-git-receiver/shell-command-parser.h +++ b/src/blogc-git-receiver/shell-command-parser.h @@ -10,6 +10,5 @@  #define _SHELL_COMMAND_PARSER_H  char* bgr_shell_command_parse(const char *command); -char* bgr_shell_quote(const char *command);  #endif /* _SHELL_COMMAND_PARSER_H */ diff --git a/src/blogc-git-receiver/shell.c b/src/blogc-git-receiver/shell.c index d83174f..a21c5bd 100644 --- a/src/blogc-git-receiver/shell.c +++ b/src/blogc-git-receiver/shell.c @@ -51,7 +51,7 @@ bgr_shell(int argc, char *argv[])      }      repo = bc_strdup_printf("%s/repos/%s", home, tmp_repo); -    quoted_repo = bgr_shell_quote(repo); +    quoted_repo = bc_shell_quote(repo);      free(tmp_repo);      if (0 == strncmp(argv[2], "git-upload-", 11))  // no need to check len here diff --git a/src/common/utils.c b/src/common/utils.c index f745146..9061e40 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -643,3 +643,27 @@ bc_trie_foreach(bc_trie_t *trie, bc_trie_foreach_func_t func,      bc_trie_foreach_node(trie->root, str, func, user_data);      bc_string_free(str, true);  } + + +char* +bc_shell_quote(const char *command) +{ +    bc_string_t *rv = bc_string_new(); +    bc_string_append_c(rv, '\''); +    if (command != NULL) { +        for (size_t i = 0; i < strlen(command); i++) { +            switch (command[i]) { +                case '!': +                    bc_string_append(rv, "'\\!'"); +                    break; +                case '\'': +                    bc_string_append(rv, "'\\''"); +                    break; +                default: +                    bc_string_append_c(rv, command[i]); +            } +        } +    } +    bc_string_append_c(rv, '\''); +    return bc_string_free(rv, false); +} diff --git a/src/common/utils.h b/src/common/utils.h index 020f243..2bda45d 100644 --- a/src/common/utils.h +++ b/src/common/utils.h @@ -99,4 +99,9 @@ size_t bc_trie_size(bc_trie_t *trie);  void bc_trie_foreach(bc_trie_t *trie, bc_trie_foreach_func_t func,      void *user_data); + +// shell + +char* bc_shell_quote(const char *command); +  #endif /* _UTILS_H */ diff --git a/tests/blogc-git-receiver/check_shell_command_parser.c b/tests/blogc-git-receiver/check_shell_command_parser.c index 9d0e282..a97df60 100644 --- a/tests/blogc-git-receiver/check_shell_command_parser.c +++ b/tests/blogc-git-receiver/check_shell_command_parser.c @@ -205,40 +205,11 @@ test_shell_command_parse(void **state)  } -static void -test_shell_quote(void **state) -{ -    char *t; -    t = bgr_shell_quote(NULL); -    assert_string_equal(t, "''"); -    free(t); -    t = bgr_shell_quote("!bola"); -    assert_string_equal(t, "''\\!'bola'"); -    free(t); -    t = bgr_shell_quote("'bola"); -    assert_string_equal(t, "''\\''bola'"); -    free(t); -    t = bgr_shell_quote("bo!bola"); -    assert_string_equal(t, "'bo'\\!'bola'"); -    free(t); -    t = bgr_shell_quote("bo'bola"); -    assert_string_equal(t, "'bo'\\''bola'"); -    free(t); -    t = bgr_shell_quote("bola!"); -    assert_string_equal(t, "'bola'\\!''"); -    free(t); -    t = bgr_shell_quote("bola'"); -    assert_string_equal(t, "'bola'\\'''"); -    free(t); -} - -  int  main(void)  {      const UnitTest tests[] = {          unit_test(test_shell_command_parse), -        unit_test(test_shell_quote),      };      return run_tests(tests);  } diff --git a/tests/common/check_utils.c b/tests/common/check_utils.c index f761cd8..955503b 100644 --- a/tests/common/check_utils.c +++ b/tests/common/check_utils.c @@ -943,6 +943,34 @@ test_trie_foreach(void **state)  } +static void +test_shell_quote(void **state) +{ +    char *t; +    t = bc_shell_quote(NULL); +    assert_string_equal(t, "''"); +    free(t); +    t = bc_shell_quote("!bola"); +    assert_string_equal(t, "''\\!'bola'"); +    free(t); +    t = bc_shell_quote("'bola"); +    assert_string_equal(t, "''\\''bola'"); +    free(t); +    t = bc_shell_quote("bo!bola"); +    assert_string_equal(t, "'bo'\\!'bola'"); +    free(t); +    t = bc_shell_quote("bo'bola"); +    assert_string_equal(t, "'bo'\\''bola'"); +    free(t); +    t = bc_shell_quote("bola!"); +    assert_string_equal(t, "'bola'\\!''"); +    free(t); +    t = bc_shell_quote("bola'"); +    assert_string_equal(t, "'bola'\\'''"); +    free(t); +} + +  int  main(void)  { @@ -987,6 +1015,9 @@ main(void)          unit_test(test_trie_lookup),          unit_test(test_trie_size),          unit_test(test_trie_foreach), + +        // shell +        unit_test(test_shell_quote),      };      return run_tests(tests);  } | 
