git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 0/3] parse: replace atoi() with strtoul_ui() and strtol_i()

From
Usman Akinyemi via GitGitGadget <gitgitgadget@gmail.com>
Date
Oct 22, 2024, 05:23 UTC
Message-ID
<pull.1810.v3.git.git.1729574624.gitgitgadget@gmail.com>
In-Reply-To
<pull.1810.v2.git.git.1729259580.gitgitgadget@gmail.com>
Changes from Version 2:
 * Use ${SQ} for single quote.
 * Change the commit message from Updated to Update, Replaced to Replace.
 * Format the commit message well.
 * Used warning for when marker size contains letters instead of die to
   avoid breaking somebody elses command as the test involve adding
   conflict_marker_size into .gitiattribute which is commited into the
   repository.
Usman Akinyemi (3):
  daemon: replace atoi() with strtoul_ui() and strtol_i()
  merge: replace atoi() with strtol_i() for marker size validation
  imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT
    parsing
 daemon.c              | 11 +++++++----
 imap-send.c           | 13 ++++++++-----
 merge-ll.c            | 11 +++++++++--
 t/t5570-git-daemon.sh | 26 ++++++++++++++++++++++++++
 t/t6406-merge-attr.sh |  6 ++++++
 5 files changed, 56 insertions(+), 11 deletions(-)
base-commit: 90fe3800b92a49173530828c0a17951abd30f0e1
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1810%2FUnique-Usman%2Fr_atoi-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1810/Unique-Usman/r_atoi-v3
Pull-Request: https://github.com/git/git/pull/1810
Range-diff vs v2:
 1:  a333d8a4013 ! 1:  e292b82d6a1 daemon: replace atoi() with strtoul_ui() and strtol_i()
     @@ Metadata
       ## Commit message ##
          daemon: replace atoi() with strtoul_ui() and strtol_i()
      
     -    Replaced atoi() with strtoul_ui() for --timeout and --init-timeout
     +    Replace atoi() with strtoul_ui() for --timeout and --init-timeout
          (non-negative integers) and with strtol_i() for --max-connections
          (signed integers). This improves error handling and input validation
          by detecting invalid values and providing clear error messages.
     -    Updated tests to ensure these arguments are properly validated.
     +    Update tests to ensure these arguments are properly validated.
      
          Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
      
     @@ daemon.c: int cmd_main(int argc, const char **argv)
       		if (!strcmp(arg, "--strict-paths")) {
      
       ## t/t5570-git-daemon.sh ##
     -@@
     - #!/bin/sh
     - 
     --test_description='test fetching over git protocol'
     -+test_description='test fetching over git protocol and daemon rejects invalid options'
     - GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
     - export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
     - 
      @@ t/t5570-git-daemon.sh: TEST_PASSES_SANITIZE_LEAK=true
       . ./test-lib.sh
       
     @@ t/t5570-git-daemon.sh: TEST_PASSES_SANITIZE_LEAK=true
      +	for arg in "3a" "-3"
      +	do
      +		test_must_fail git daemon --init-timeout="$arg" 2>actual_error &&
     -+		test_write_lines "fatal: invalid init-timeout '\''$arg'\'', expecting a non-negative integer" >expected &&
     ++		test_write_lines "fatal: invalid init-timeout ${SQ}$arg${SQ}, expecting a non-negative integer" >expected &&
      +		test_cmp actual_error expected || return 1
      +	done
      +'
     @@ t/t5570-git-daemon.sh: TEST_PASSES_SANITIZE_LEAK=true
      +	for arg in "3a" "-3"
      +	do
      +		test_must_fail git daemon --timeout="$arg" 2>actual_error &&
     -+		test_write_lines "fatal: invalid timeout '\''$arg'\'', expecting a non-negative integer" >expected &&
     ++		test_write_lines "fatal: invalid timeout ${SQ}$arg${SQ}, expecting a non-negative integer" >expected &&
      +		test_cmp actual_error expected || return 1
      +	done
      +'
      +
      +test_expect_success 'daemon rejects invalid --max-connections values' '
     ++	arg='3a' &&
      +	test_must_fail git daemon --max-connections=3a 2>actual_error &&
     -+	test_write_lines "fatal: invalid max-connections '\''3a'\'', expecting an integer" >expected &&
     ++	test_write_lines "fatal: invalid max-connections ${SQ}$arg${SQ}, expecting an integer" >expected &&
      +	test_cmp actual_error expected
      +'
      +
 2:  5d58c150efb ! 2:  2ad3b0faa05 merge: replace atoi() with strtol_i() for marker size validation
     @@ Metadata
       ## Commit message ##
          merge: replace atoi() with strtol_i() for marker size validation
      
     -    Replaced atoi() with strtol_i() for parsing conflict-marker-size to
     +    Replace atoi() with strtol_i() for parsing conflict-marker-size to
          improve error handling. Invalid values, such as those containing letters
          now trigger a clear error message.
     -    Updated the test to verify invalid input handling.
     +    Update the test to verify invalid input handling.
      
          Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
      
       ## merge-ll.c ##
     +@@
     + #include "merge-ll.h"
     + #include "quote.h"
     + #include "strbuf.h"
     ++#include "gettext.h"
     + 
     + struct ll_merge_driver;
     + 
      @@ merge-ll.c: enum ll_merge_result ll_merge(mmbuffer_t *result_buf,
       	git_check_attr(istate, path, check);
       	ll_driver_name = check->items[0].value;
       	if (check->items[1].value) {
      -		marker_size = atoi(check->items[1].value);
     -+		if (strtol_i(check->items[1].value, 10, &marker_size))
     -+			die("invalid marker-size '%s', expecting an integer", check->items[1].value);
     ++		if (strtol_i(check->items[1].value, 10, &marker_size)) {
     ++			marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
     ++			warning(_("invalid marker-size '%s', expecting an integer"), check->items[1].value);
     ++		}
       		if (marker_size <= 0)
       			marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
       	}
     @@ merge-ll.c: int ll_merge_marker_size(struct index_state *istate, const char *pat
       	git_check_attr(istate, path, check);
       	if (check->items[0].value) {
      -		marker_size = atoi(check->items[0].value);
     -+		if (strtol_i(check->items[0].value, 10, &marker_size))
     -+			die("invalid marker-size '%s', expecting an integer", check->items[0].value);
     ++		if (strtol_i(check->items[0].value, 10, &marker_size)) {
     ++			marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
     ++			warning(_("invalid marker-size '%s', expecting an integer"), check->items[0].value);
     ++		}
       		if (marker_size <= 0)
       			marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
       	}
     @@ t/t6406-merge-attr.sh: test_expect_success 'retry the merge with longer context'
       
      +test_expect_success 'invalid conflict-marker-size 3a' '
      +    echo "text conflict-marker-size=3a" >>.gitattributes &&
     -+    test_must_fail git checkout -m text 2>actual_error &&
     -+    test_write_lines "fatal: invalid marker-size '\''3a'\'', expecting an integer" >expected &&
     -+    test_cmp actual_error expected
     ++    git checkout -m text 2>error &&
     ++    test_grep "warning: invalid marker-size ${SQ}3a${SQ}, expecting an integer" error
      +'
      +
       test_expect_success 'custom merge backend' '
 3:  c09c7b3df0d ! 3:  d0aa756d2d0 imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsing
     @@ Metadata
       ## Commit message ##
          imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsing
      
     -    Replaced unsafe uses of atoi() with strtol_i() to improve error handling
     +    Replace unsafe uses of atoi() with strtol_i() to improve error handling
          when parsing UIDVALIDITY, UIDNEXT, and APPENDUID in IMAP commands.
     -    Invalid values, such as those with letters,
     -    now trigger error messages and prevent malformed status responses.
     +    Invalid values, such as those with letters, now trigger error messages and
     +    prevent malformed status responses.
     +    I did not add any test for this commit as we do not have any test
     +    for git-imap-send(1) at this point.
      
          Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
      
-- 
gitgitgadget
Previous: Usman AkinyemiNext: Usman Akinyemi via GitGitGadget
Message 64 of 94 in “R atoi”
  1. 0/3 R atoiUsman Akinyemi via GitGitGadget, Oct 12, 2024
  2. 1/3 t3404: avoid losing exit status with focus on `git show` and `git cat-file`Usman Akinyemi via GitGitGadget, Oct 12, 2024
  3. Taylor BlauOct 14, 2024
  4. 2/3 t3404: replace test with test_line_count()Usman Akinyemi via GitGitGadget, Oct 12, 2024
  5. Taylor BlauOct 14, 2024
  6. 3/3 parse: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 12, 2024
  7. Usman AkinyemiOct 13, 2024
  8. Phillip WoodOct 14, 2024
  9. Usman AkinyemiOct 14, 2024
  10. Patrick SteinhardtOct 14, 2024
  11. Phillip WoodOct 14, 2024
  12. Patrick SteinhardtOct 14, 2024
  13. Phillip WoodOct 14, 2024
  14. Usman AkinyemiOct 14, 2024
  15. Usman AkinyemiOct 14, 2024
  16. phillip.wood123@gmail.comOct 14, 2024
  17. Usman AkinyemiOct 15, 2024
  18. Taylor BlauOct 15, 2024
  19. Usman AkinyemiOct 16, 2024
  20. phillip.wood123@gmail.comOct 15, 2024
  21. Phillip WoodOct 16, 2024
  22. Usman AkinyemiOct 16, 2024
  23. Usman AkinyemiOct 17, 2024
  24. Patrick SteinhardtOct 17, 2024
  25. Usman AkinyemiOct 17, 2024
  26. Usman AkinyemiOct 14, 2024
  27. Phillip WoodOct 14, 2024
  28. Kristoffer HaugsbakkOct 14, 2024
  29. Phillip WoodOct 14, 2024
  30. Usman AkinyemiOct 14, 2024
  31. phillip.wood123@gmail.comOct 14, 2024
  32. Usman AkinyemiOct 17, 2024
  33. 0/3 parse: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 18, 2024
  34. 1/3 daemon: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 18, 2024
  35. Patrick SteinhardtOct 21, 2024
  36. Usman AkinyemiOct 21, 2024
  37. Taylor BlauOct 21, 2024
  38. Usman AkinyemiOct 21, 2024
  39. 2/3 merge: replace atoi() with strtol_i() for marker size validationUsman Akinyemi via GitGitGadget, Oct 18, 2024
  40. Patrick SteinhardtOct 21, 2024
  41. Usman AkinyemiOct 21, 2024
  42. Taylor BlauOct 21, 2024
  43. Usman AkinyemiOct 21, 2024
  44. Usman AkinyemiOct 21, 2024
  45. Taylor BlauOct 21, 2024
  46. Phillip WoodOct 30, 2024
  47. Usman AkinyemiOct 30, 2024
  48. Phillip WoodOct 31, 2024
  49. Usman AkinyemiOct 31, 2024
  50. Usman AkinyemiNov 6, 2024
  51. phillip.wood123@gmail.comNov 6, 2024
  52. 3/3 imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsingUsman Akinyemi via GitGitGadget, Oct 18, 2024
  53. Patrick SteinhardtOct 21, 2024
  54. Usman AkinyemiOct 21, 2024
  55. Patrick SteinhardtOct 21, 2024
  56. Usman AkinyemiOct 21, 2024
  57. Taylor BlauOct 21, 2024
  58. Usman AkinyemiOct 21, 2024
  59. Usman AkinyemiOct 22, 2024
  60. Taylor BlauOct 18, 2024
  61. Usman AkinyemiOct 18, 2024
  62. Taylor BlauOct 18, 2024
  63. Usman AkinyemiOct 18, 2024
  64. 0/3 parse: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 22, 2024
  65. 1/3 daemon: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 22, 2024
  66. Taylor BlauOct 22, 2024
  67. Usman AkinyemiOct 22, 2024
  68. 2/3 merge: replace atoi() with strtol_i() for marker size validationUsman Akinyemi via GitGitGadget, Oct 22, 2024
  69. 3/3 imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsingUsman Akinyemi via GitGitGadget, Oct 22, 2024
  70. 0/3 parse: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 22, 2024
  71. 1/3 daemon: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 22, 2024
  72. 2/3 merge: replace atoi() with strtol_i() for marker size validationUsman Akinyemi via GitGitGadget, Oct 22, 2024
  73. 3/3 imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsingUsman Akinyemi via GitGitGadget, Oct 22, 2024
  74. Patrick SteinhardtOct 23, 2024
  75. Usman AkinyemiOct 23, 2024
  76. 0/3 parse: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 23, 2024
  77. 1/3 daemon: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 23, 2024
  78. Taylor BlauOct 23, 2024
  79. Usman AkinyemiOct 24, 2024
  80. 2/3 merge: replace atoi() with strtol_i() for marker size validationUsman Akinyemi via GitGitGadget, Oct 23, 2024
  81. Taylor BlauOct 23, 2024
  82. Usman AkinyemiOct 24, 2024
  83. 3/3 imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsingUsman Akinyemi via GitGitGadget, Oct 23, 2024
  84. Patrick SteinhardtOct 23, 2024
  85. Taylor BlauOct 23, 2024
  86. Usman AkinyemiOct 24, 2024
  87. 0/3 parse: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 24, 2024
  88. 1/3 daemon: replace atoi() with strtoul_ui() and strtol_i()Usman Akinyemi via GitGitGadget, Oct 24, 2024
  89. 2/3 merge: replace atoi() with strtol_i() for marker size validationUsman Akinyemi via GitGitGadget, Oct 24, 2024
  90. 3/3 imap: replace atoi() with strtol_i() for UIDVALIDITY and UIDNEXT parsingUsman Akinyemi via GitGitGadget, Oct 24, 2024
  91. Taylor BlauOct 24, 2024
  92. Patrick SteinhardtOct 25, 2024
  93. Usman AkinyemiOct 25, 2024
  94. Taylor BlauOct 25, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.