Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: gdb-patches@sourceware.org, ismail@pardus.org.tr
Subject: [rfc] Do not crash reading UPX binaries
Date: Sun, 01 Jul 2007 21:56:00 -0000	[thread overview]
Message-ID: <20070701215549.GA26528@caradoc.them.org> (raw)

This patch issues an error instead of a segfault on the testcase
in PR 2280.  UPX is a binary compression system; it's infamous for
producing very strange files, which are only "just valid enough".
In this case, it claims that the symbol table is at a large offset
in a very small file.

I don't think it's worth supporting files this modified.  Does anyone
think we need to do better, or shall I check in the attached?

-- 
Daniel Jacobowitz
CodeSourcery

2007-07-01  Daniel Jacobowitz  <dan@codesourcery.com>

	PR gdb/2280
	* coffread.c (read_one_sym): Check for read errors.

Index: coffread.c
===================================================================
RCS file: /cvs/src/src/gdb/coffread.c,v
retrieving revision 1.73
diff -u -p -r1.73 coffread.c
--- coffread.c	19 Jun 2007 17:21:51 -0000	1.73
+++ coffread.c	1 Jul 2007 21:53:06 -0000
@@ -1118,20 +1118,29 @@ read_one_sym (struct coff_symbol *cs,
 	      union internal_auxent *aux)
 {
   int i;
+  bfd_size_type bytes;
 
   cs->c_symnum = symnum;
-  bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
+  bytes = bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
+  if (bytes != local_symesz)
+    error ("%s: error reading symbols", current_objfile->name);
   bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *) sym);
   cs->c_naux = sym->n_numaux & 0xff;
   if (cs->c_naux >= 1)
     {
-      bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
+      bytes  = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
+      if (bytes != local_auxesz)
+	error ("%s: error reading symbols", current_objfile->name);
       bfd_coff_swap_aux_in (symfile_bfd, temp_aux, sym->n_type, sym->n_sclass,
 			    0, cs->c_naux, (char *) aux);
       /* If more than one aux entry, read past it (only the first aux
          is important). */
       for (i = 1; i < cs->c_naux; i++)
-	bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
+	{
+	  bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
+	  if (bytes != local_auxesz)
+	    error ("%s: error reading symbols", current_objfile->name);
+	}
     }
   cs->c_name = getsymname (sym);
   cs->c_value = sym->n_value;


             reply	other threads:[~2007-07-01 21:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-01 21:56 Daniel Jacobowitz [this message]
2007-07-01 22:12 ` Ismail Dönmez
2007-07-01 22:28   ` Daniel Jacobowitz
2007-07-01 22:31     ` Ismail Dönmez
2007-07-02  1:53       ` Daniel Jacobowitz
2007-10-11 19:53 ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070701215549.GA26528@caradoc.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    --cc=ismail@pardus.org.tr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox