Re: Fix inappropriate uses of atol() - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: Fix inappropriate uses of atol()
Date
Msg-id 66d612b0-6037-4b52-a048-f2e6926f7db5@iki.fi
Whole thread Raw
In response to Re: Fix inappropriate uses of atol()  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Fix inappropriate uses of atol()
List pgsql-hackers
On 03/08/2024 18:20, Tom Lane wrote:
> Heikki Linnakangas <hlinnaka@iki.fi> writes:
>> On 03/08/2024 14:04, Peter Eisentraut wrote:
>>> I noticed (during [0]) to some uses of the function atol() seem
>>> inappropriate.
> 
>> +1 except for this one:
> 
>>> /* If we have just one character this is not a string */
>>> -            if (atol(p->type->size) == 1)
>>> +            if (atoi(p->type->size) == 1)
>>>                   mmerror(PARSE_ERROR, ET_ERROR, "invalid data type");
> 
> How about
> 
> -            if (atol(p->type->size) == 1)
> +            if (strcmp(p->type->size, "1") == 0)
> 
> ?  I've not actually tested, but this should catch the cases the
> warning is meant to catch while not complaining about any of the
> examples you give.

Makes sense.

>  I'm not sure if leading/trailing spaces
> would fool it (i.e., "char foo[ 1 ];").  But even if they do,
> that doesn't seem disastrous.
Right. There are many ways to fool it in that direction, e.g.

#define ONE 1
char foo[ONE];

I'm actually not even sure if it's intentional to throw the error even 
with "char[1]". It makes sense to give an error on "char", but who says 
that "char[1]" isn't a valid string? Not a very useful string, because 
it can only hold the empty string, but a string nevertheless, and 
sometimes an empty string is exactly what you want.

If we can easily distinguish between "char" and any array of char here, 
might be best to accept the all arrays regardless of the length.

-- 
Heikki Linnakangas
Neon (https://neon.tech)




pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Fix inappropriate uses of atol()
Next
From: Tom Lane
Date:
Subject: Re: Draft release notes for next week's releases are up