Re: [PATCH 2/3] config: require at least one digit when parsing numbers
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 25, 2022, 16:08 UTC
- Message-ID
- <xmqqh6zropgo.fsf@gitster.g>
- In-Reply-To
- <cb034574-8753-d641-c166-ae2c34b1c589@dunelm.org.uk>
Phillip Wood <phillip.wood123@gmail.com> writes:
Show 21 quoted lines
> On 21/10/2022 19:19, Junio C Hamano wrote:
>> "Phillip Wood via GitGitGadget" <gitgitgadget@gmail.com> writes:
>>> @@ -1167,6 +1167,10 @@ static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max)
>>> val = strtoimax(value, &end, 0);
>>> if (errno == ERANGE)
>>> return 0;
>>> + if (end == value) {
>>> + errno = EINVAL;
>>> + return 0;
>>> + }
>> This means well, but doesn't strto*() family of functions silently
>> ignore leading blanks, e.g.
>> l = strtol(" 432k", &end, 0);
>> ... l == 432, *end = k ...
>> If you really want to reject a string with no number before the
>> optional unit, end at this point may not match value. With " k" as
>> input, value would point at the space at the beginning, and end
>> would point at 'k'.
>
> It only skips the space if it sees a digit, if it does not find
> anything to convert it sets *end = start.Yeah, thanks. Yes, my earlier observation was based on a faulty experiments, and the code posted as-is would be OK.