This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch]: ld crash on i386/pe when linking with a dll that has no exports


On Wed, Nov 25, 2009 at 10:20:54AM +0100, Tristan Gingold wrote:
>Hi,
>
>we got a crash when linking with a dll whose export directory is empty:
>...
>NumberOfRvaAndSizes	00000010
>
>The Data Directory
>Entry 0 00000000 00000000 Export Directory [.edata (or where ever we found it)]
>Entry 1 00016000 0000003c Import Directory [parts of .idata]
>...
>
>In fact there is no guard against such values in ld/pe-dll.c(pe_implied_import_dll) and this function
>assumes that the export directory entry is not empty if present.
>
>This patch fixes this crash.

Isn't this supposed to be handled by the

  if (num_entries < 1) /* No exports.  */
    return FALSE;

a few lines above it?

If this test is inadequate then it seems like num_entries isn't needed
and should be deleted.

cgf


>ld/
>2009-11-25  Tristan Gingold  <gingold@adacore.com>
>
>	* pe-dll.c (pe_implied_import_dll): Return early if there is no
>	export entries.
>
>*** ld/pe-dll.c	15 Nov 2009 07:52:42 -0000	1.123
>--- ld/pe-dll.c	25 Nov 2009 09:12:43 -0000
>***************
>*** 3001,3006 ****
>--- 3001,3010 ----
>    export_size = pe_get32 (dll, opthdr_ofs + 100);
>  #endif
>  
>+   /* No exports.  */
>+   if (export_size == 0)
>+     return FALSE;
>+ 
>    nsections = pe_get16 (dll, pe_header_offset + 4 + 2);
>    secptr = (pe_header_offset + 4 + 20 +
>  	    pe_get16 (dll, pe_header_offset + 4 + 16));
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]