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;
}
next 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