bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#21065: bug#21056: [BUG] Bug with dirname on Ubuntu


From: Eric Blake
Subject: bug#21065: bug#21056: [BUG] Bug with dirname on Ubuntu
Date: Thu, 16 Jul 2015 06:30:42 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.0.1

[adding the list back in, with permission]

On 07/14/2015 07:47 PM, Vinh Nguyen wrote:
> Dear Eric,
> Thank you for your useful information about dirname function. But the main 
> thing I wanted to report is not the way to use dirname, but the weird 
> behavior of dirname loading library named "." into the running process and 
> cause error "Error while mapping shared library sections. '.' is not in 
> executable format: Is a directory" and segmentation fault subsequently. The 
> document says nothing about this behavior so it is a bug. Also, Dl_info's 
> dli_fname is a char array, not const char* so the cast in 
> "dirname((char*)info.dli_fname)" just do nothing.
> I'm looking forward to hearing from you soon.

Your problem stems from the fact that calling dirname() modifies its
argument.

>>         Dl_info info;
>>         if ( dladdr( ( const void* )function_to_get_address, &info ) == 0 )
>>             return false;
>>         if ( info.dli_fname == NULL )
>>             return false;
>>         dirname((char*)info.dli_fname); (1)

Whatever info.dli_fname was prior to dirname, it was modified in place
to now be "." after the invalid call.  So now that it has a changed
value, it is messing with all the assumptions of the rest of dl*() that
assume the name will not be changed.

I stand by my assertion that the bug is in your invalid use of dirname().

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]