Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Carlos O'Donell <carlos@codesourcery.com>
To: gdb-patches@sourceware.org
Cc: Daniel Jacobowitz <dan@codesourcery.com>
Subject: [PATCH] Fix uninitialized use of variables.
Date: Sat, 20 Oct 2007 18:07:00 -0000	[thread overview]
Message-ID: <20071020172137.GC28823@lios> (raw)


Compiling gdb head with gcc head reveals two uninitialized uses of
variables. Analysis of the uninitialized uses reveals that gcc is
correct. The following patch fixes both uninitiailized uses of
variables.

In remote.c (unpack_nibble) the variable *val is not set if ishex fails
to find hex digits. Callers of unpack_nibble expect *val to be set. The
solution is to check the return of ishex, and call error appropriately.
In the case that *val is not set, the uninitialized use is never reached
because we call error.

In symtab.c (find_line_common) the variable *exact_match is not set if
no match is found. Callers of find_line_common expect *exact_match to be
set. The solution is to initialize *exact_match to zero, assuming an
inexact match. In the case that we don't find a match in
find_line_common, the statement `(best_index < 0 || !exact)' in
symtab.c:2267 is true, instead of undefined. The comment is adjusted to
indicate that one must look at another symtab if we failed to find a
match `best_index < 0' or we found an inexact match `!exact.'

No regressions on i686-pc-linux-gnu. 

OK to checkin?

Cheers,
Carlos.
-- 
Carlos O'Donell
CodeSourcery
carlos@codesourcery.com
(650) 331-3385 x716

gdb/

2007-10-18  Carlos O'Donell  <carlos@codesourcery.com>

	* remote.c (unpack_nibble): error if buffer is not valid hex.
	* symtab.c (find_line_symtab): `no match' case is important.
	(find_line_common): Default *exact_match = 0 before search.

Index: gdb/remote.c
===================================================================
RCS file: /cvs/src/src/gdb/remote.c,v
retrieving revision 1.271
diff -u -p -r1.271 remote.c
--- gdb/remote.c	8 Oct 2007 12:55:09 -0000	1.271
+++ gdb/remote.c	18 Oct 2007 16:34:05 -0000
@@ -1343,7 +1343,8 @@ unpack_varlen_hex (char *buff,	/* packet
 static char *
 unpack_nibble (char *buf, int *val)
 {
-  ishex (*buf++, val);
+  if (!ishex (*buf++, val))
+    error (_("Unpacked nibble does not contain hex characters."));
   return buf;
 }
 
Index: gdb/symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.166
diff -u -p -r1.166 symtab.c
--- gdb/symtab.c	9 Oct 2007 06:59:27 -0000	1.166
+++ gdb/symtab.c	18 Oct 2007 16:34:05 -0000
@@ -2267,10 +2267,10 @@ find_line_symtab (struct symtab *symtab,
   best_index = find_line_common (best_linetable, line, &exact);
   if (best_index < 0 || !exact)
     {
-      /* Didn't find an exact match.  So we better keep looking for
-         another symtab with the same name.  In the case of xcoff,
-         multiple csects for one source file (produced by IBM's FORTRAN
-         compiler) produce multiple symtabs (this is unavoidable
+      /* Didn't find an exact match, or any match.  So we better keep 
+         looking for another symtab with the same name.  In the case of 
+         xcoff, multiple csects for one source file (produced by IBM's 
+         FORTRAN compiler) produce multiple symtabs (this is unavoidable
          assuming csects can be at arbitrary places in memory and that
          the GLOBAL_BLOCK of a symtab has a begin and end address).  */
 
@@ -2411,6 +2411,9 @@ find_line_common (struct linetable *l, i
   int best_index = -1;
   int best = 0;
 
+  /* Assume an inexact match.  */
+  *exact_match = 0;
+
   if (lineno <= 0)
     return -1;
   if (l == 0)
@@ -2436,8 +2439,6 @@ find_line_common (struct linetable *l, i
     }
 
   /* If we got here, we didn't get an exact match.  */
-
-  *exact_match = 0;
   return best_index;
 }
 


             reply	other threads:[~2007-10-20 17:21 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-20 18:07 Carlos O'Donell [this message]
2007-10-23 23:20 ` Jim Blandy
2007-10-24 17:24   ` Carlos O'Donell
2007-10-24  0:10 ` Jim Blandy
2007-10-24  4:05   ` Daniel Jacobowitz
2007-10-24 17:12     ` Jim Blandy
2007-10-24 17:57       ` Daniel Jacobowitz
2007-10-24 17:15   ` Jim Blandy
2007-10-24 18:02   ` Carlos O'Donell
2007-10-24 18:21     ` Jim Blandy
2007-10-26 18:51       ` Carlos O'Donell

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=20071020172137.GC28823@lios \
    --to=carlos@codesourcery.com \
    --cc=dan@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /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