[cfe-dev] -fcatch-undefined-behavior false positive with readdir()?
Sean McBride
sean at rogue-research.com
Wed Sep 26 12:38:27 PDT 2012
On Wed, 26 Sep 2012 10:40:47 -0400, Joe Ranieri said:
>> DIR* dir = opendir("/usr/lib");
>> if (dir)
>> {
>> struct dirent* d = NULL;
>> while ((d = readdir(dir)) != NULL)
>> {
>> const char* local = d->d_name; // bam!
>> printf ("%s\n", local);
>> }
>> closedir(dir);
>> }
>>
>
> *SNIP*
>
>Just a hunch: is d->d_name an unaligned pointer? We ran into a similar
>issue with gethostbyname.
Joe,
Thanks for your reply. But I'm afraid I don't follow. Unaligned with respect to what? The 'struct dirent' is declared by the system basically like so:
#pragma pack()
struct dirent {
uint64_t d_ino;
uint64_t d_seekoff;
uint16_t d_reclen;
uint16_t d_namlen;
uint8_t d_type;
char d_name[1024];
}
Note the 'pragma pack'; is that the alignment you're referring to? On my system, I don't see any pragma pack with gethostbyname()'s 'struct hostent', what problem did you have with it?
I just tried something else: it's not just the d_name field, but accessing any field triggers the SIGILL.
Cheers,
--
____________________________________________________________
Sean McBride, B. Eng sean at rogue-research.com
Rogue Research www.rogue-research.com
Mac Software Developer Montréal, Québec, Canada
More information about the cfe-dev
mailing list