bug-binutils
[Top][All Lists]
Advanced

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

[Bug binutils/136] BFD crashes when cached file can't be reopened


From: mikulas at artax dot karlin dot mff dot cuni dot cz
Subject: [Bug binutils/136] BFD crashes when cached file can't be reopened
Date: 5 May 2004 17:11:50 -0000

------- Additional Comments From mikulas at artax dot karlin dot mff dot cuni 
dot cz  2004-05-05 17:11 -------
Subject: Re:  BFD crashes when cached file can't be reopened



On Wed, 5 May 2004, nickc at redhat dot com wrote:

>
> ------- Additional Comments From nickc at redhat dot com  2004-05-05 15:37 
> -------
> Subject: Re:  New: BFD crashes when cached file can't be
>  reopened
>
> Hi Mikulas,
>
> >BFD keeps cache of files and has only few files open at a time. When the 
> >file is
> >not in open-descriptor cache, BFD reopens it. BFD crashes trying to work with
> >NULL FILE * pointer, when reopening file fails.
> >
> >A lot of code in bfd expects that bfd_cache_lookup always returns non-zero 
> >FILE
> >* pointer. However bfd_cache_lookup may call bfd_cache_lookup_worker and
> >bfd_cache_lookup_worker may return NULL if file could not be reopened.
> >
> >You should either modify bfd_cache_lookup_worker to abort instead of 
> >returning
> >NULL or check for a non-null pointer at each call to bfd_cache_lookup.
> >
> >
> You mean like the attached (and applied) patch ?
>
> Thanks for bringing this to our attention.  I have applied the attached
> patch along with this ChangeLog entry:

You should also print error message before abort, shoudn't you? It would
be confusing to user to see abort without explanation.

Mikulas

> 2004-05-05  Nick Clifton  <address@hidden>
>
>     PR/136
>     * cache.c (bfd_cache_lookup_worker): Call abort() rather than
>     returning NULL as most users of this function do not check its
>     return value.
>
> Cheers
>   Nick
>
>
> Index: bfd/cache.c
> ===================================================================
> RCS file: /cvs/src/src/bfd/cache.c,v
> retrieving revision 1.13
> diff -c -3 -p -r1.13 cache.c
> *** bfd/cache.c       22 Apr 2004 16:17:31 -0000      1.13
> --- bfd/cache.c       5 May 2004 15:29:43 -0000
> *************** DESCRIPTION
> *** 438,444 ****
>       quick answer.  Find a file descriptor for @var{abfd}.  If
>       necessary, it open it.  If there are already more than
>       <<BFD_CACHE_MAX_OPEN>> files open, it tries to close one first, to
> !     avoid running out of file descriptors.
>   */
>
>   FILE *
> --- 438,445 ----
>       quick answer.  Find a file descriptor for @var{abfd}.  If
>       necessary, it open it.  If there are already more than
>       <<BFD_CACHE_MAX_OPEN>> files open, it tries to close one first, to
> !     avoid running out of file descriptors.  It will abort rather than
> !     returning NULL if it is unable to (re)open the @var{abfd}.
>   */
>
>   FILE *
> *************** bfd_cache_lookup_worker (bfd *abfd)
> *** 461,472 ****
>       }
>     else
>       {
> !       if (bfd_open_file (abfd) == NULL)
> !     return NULL;
> !       if (abfd->where != (unsigned long) abfd->where)
> !     return NULL;
> !       if (real_fseek ((FILE *) abfd->iostream, abfd->where, SEEK_SET) != 0)
> !     return NULL;
>       }
>
>     return (FILE *) abfd->iostream;
> --- 462,471 ----
>       }
>     else
>       {
> !       if (bfd_open_file (abfd) == NULL
> !       || abfd->where != (unsigned long) abfd->where
> !       || real_fseek ((FILE *) abfd->iostream, abfd->where, SEEK_SET) != 0)
> !     abort ();
>       }
>
>     return (FILE *) abfd->iostream;
>
>
> --
>
>
> http://sources.redhat.com/bugzilla/show_bug.cgi?id=136
>
> ------- You are receiving this mail because: -------
> You reported the bug, or are watching the reporter.
>


-- 


http://sources.redhat.com/bugzilla/show_bug.cgi?id=136

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.




reply via email to

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