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] elf32-i386.c, check for null


On Thu, Jul 26, 2007 at 06:42:01PM -0700, msnyder@sonic.net wrote:
> 
> >
> > I prefer BFD_ASSERT (h != NULL) and R_386_GNU_VTINHERIT has the same
> > issue.
> 
> OK -- how's this?
> 

> 2007-07-25  Michael Snyder  <msnyder@access-company.com>
> 
> 	* elf32-i386.c (elf_i386_check_relocs): Check for null pointer.
> 
> Index: elf32-i386.c
> ===================================================================
> RCS file: /cvs/src/src/bfd/elf32-i386.c,v
> retrieving revision 1.174
> diff -p -r1.174 elf32-i386.c
> *** elf32-i386.c	3 Jul 2007 14:26:41 -0000	1.174
> --- elf32-i386.c	27 Jul 2007 01:40:47 -0000
> *************** elf_i386_check_relocs (bfd *abfd,
> *** 1270,1284 ****
>   	  /* This relocation describes the C++ object vtable hierarchy.
>   	     Reconstruct it for later use during GC.  */
>   	case R_386_GNU_VTINHERIT:
> ! 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
> ! 	    return FALSE;
>   	  break;
>   
>   	  /* This relocation describes which C++ vtable entries are actually
>   	     used.  Record for later use during GC.  */
>   	case R_386_GNU_VTENTRY:
> ! 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
> ! 	    return FALSE;
>   	  break;
>   
>   	default:
> --- 1270,1288 ----
>   	  /* This relocation describes the C++ object vtable hierarchy.
>   	     Reconstruct it for later use during GC.  */
>   	case R_386_GNU_VTINHERIT:
> ! 	  BFD_ASSERT (h != NULL);
> ! 	  if (h != NULL)
> ! 	    if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
> ! 	      return FALSE;
>   	  break;
>   
>   	  /* This relocation describes which C++ vtable entries are actually
>   	     used.  Record for later use during GC.  */
>   	case R_386_GNU_VTENTRY:
> ! 	  BFD_ASSERT (h != NULL);
> ! 	  if (h != NULL)
> ! 	    if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
> ! 	      return FALSE;
>   	  break;
>   

It is OK.  Can you use

if (h != NULL
    && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
   return FALSE;

2 ifs look odd to me. But it is OK if you don't want to change.

Thanks.


H.J.


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