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

Re: [PATCH 3/3] git_parse_signed(): avoid integer overflow

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 22, 2022, 16:51 UTC
Message-ID
<xmqqv8obhkeb.fsf@gitster.g>
In-Reply-To
<80fe7c62-2c59-a715-3a8b-2dc2331d8e37@web.de>
René Scharfe <l.s.r@web.de> writes:
Show 12 quoted lines
>>> +		if (max < 0)
>>> +			BUG("max must be a positive integer");
>>
>> In parse_signed(), would we expect to accept end-user input that is
>> a negative integer?  We must.  Otherwise we would not be calling a
>> "signed" parser.  Now, are there cases where the valid value range
>> is bounded by a negative integer at the top?  No current callers may
>> pass such a value, but is it reasonable to add such a new constraints
>> to an existing API function?
>
> Hmm, if minimum and maximum are not symmetric, then we need to supply
> both, don't we?

Ah, thanks for injecting doze of sanity---I totally missed that the bound was about the absolute value, so we can say "this is signed, and the allowed values are (-3, -2, -1, 0, 1, 2, 3). If so, then the "reject negative max" in the posted patch is not a problem as I said above. I somehow thought that giving -1 as "max" would allow callers to say "non-negative numbers are not allowed". But that is not what is going on.

Allowing callers to specify both lower and uppoer bounds so that they can say "the allowed values are (-1, 0, 1, 2, 3)", while it might make it more useful, is a separate new feature development and outside the scope of "let's tighten the parsing of end user input" Phillip has here.

Sorry about the thinko, and thanks for a new and interesting tangent.

Previous: René ScharfeNext: René Scharfe
Message 18 of 27 in “a few config integer parsing fixes”
  1. 0/3 a few config integer parsing fixesPhillip Wood via GitGitGadget, Oct 21, 2022
  2. 1/3 git_parse_unsigned: reject negative valuesPhillip Wood via GitGitGadget, Oct 21, 2022
  3. Junio C HamanoOct 21, 2022
  4. Jeff KingOct 21, 2022
  5. Junio C HamanoOct 22, 2022
  6. 2/3 config: require at least one digit when parsing numbersPhillip Wood via GitGitGadget, Oct 21, 2022
  7. Junio C HamanoOct 21, 2022
  8. Phillip WoodOct 25, 2022
  9. Junio C HamanoOct 25, 2022
  10. Jeff KingOct 21, 2022
  11. Junio C HamanoOct 22, 2022
  12. Jeff KingOct 22, 2022
  13. Junio C HamanoOct 22, 2022
  14. Phillip WoodOct 25, 2022
  15. 3/3 git_parse_signed(): avoid integer overflowPhillip Wood via GitGitGadget, Oct 21, 2022
  16. Junio C HamanoOct 21, 2022
  17. René ScharfeOct 22, 2022
  18. Junio C HamanoOct 22, 2022
  19. René ScharfeOct 23, 2022
  20. Phillip WoodOct 25, 2022
  21. René ScharfeOct 26, 2022
  22. 0/3 a few config integer parsing fixesPhillip Wood via GitGitGadget, Nov 9, 2022
  23. 1/3 git_parse_unsigned: reject negative valuesPhillip Wood via GitGitGadget, Nov 9, 2022
  24. Ævar Arnfjörð BjarmasonNov 9, 2022
  25. 2/3 config: require at least one digit when parsing numbersPhillip Wood via GitGitGadget, Nov 9, 2022
  26. 3/3 git_parse_signed(): avoid integer overflowPhillip Wood via GitGitGadget, Nov 9, 2022
  27. Taylor BlauNov 10, 2022

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.