Possibly buggy use of ctype.h macros.
Kaz Kylheku
kaz@kylheku.com
Tue Jan 2 23:56:00 GMT 2024
On 2024-01-02 15:25, Takashi Yano via Cygwin wrote:
> On Tue, 02 Jan 2024 14:18:15 -0800
> Kaz Kylheku via Cygwin <cygwin@cygwin.com> wrote:
>> I noticed that this macro, defined in winsup/cygwin/local_includes/path.h:
>>
>> #define isdrive(s) (isalpha (*(s)) && (s)[1] == ':')
>>
>> is being used with arguments of type char, like dereferenced "char *" pointers.
>>
>> Unless the isalpha implementation is robust against this, it should be isalpha((unsigned char) *(s)).
>
>
> https://cygwin.com/git/?p=newlib-cygwin.git;a=blob;f=newlib/libc/ctype/ctype_.h;h=a73870b3e4ade5545fd41bcc6f10446a22b4b46e;hb=HEAD
I see, so on Cygwin, the negative index is allowed, thanks to a displacement.
# define DEFAULT_CTYPE_PTR ((char *) _ctype_b + 127)
But, 127? A (signed) char can go to -128. '\x80' will access _ctype_b[-1]. Is that also somehow OK?
(Tangential remark: all ctype implementations have to handle at least one negative value, namely EOF.)
More information about the Cygwin
mailing list