This is the mail archive of the binutils-cvs@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]

[binutils-gdb] .file file number checking


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=8f02ae5bac22b8d7f57f233ca1957ef9dbe751ab

commit 8f02ae5bac22b8d7f57f233ca1957ef9dbe751ab
Author: Alan Modra <amodra@gmail.com>
Date:   Wed May 15 11:24:09 2019 +0930

    .file file number checking
    
    This adds another test for file numbers given in .file directives,
    checking that the value can be represented as an unsigned int and that
    a memory allocation expression doesn't overflow.  I removed a test
    added recently since an earlier test (num < 1) already covers the
    (num < 0) case.
    
    	* dwarf2dbg.c: Whitespace fixes.
    	(get_filenum): Don't strdup "file".  Adjust error message.
    	(dwarf2_directive_filename): Use an unsigned type for "num".
    	Catch truncation of file number and overflow of get_filenum
    	XRESIZEVEC multiplication.  Delete dead code.

Diff:
---
 gas/ChangeLog   | 26 +++++++++++++++++---------
 gas/dwarf2dbg.c | 27 ++++++++++++++-------------
 2 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index bcece77..be69384 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,13 @@
 2019-05-15  Alan Modra  <amodra@gmail.com>
 
+	* dwarf2dbg.c: Whitespace fixes.
+	(get_filenum): Don't strdup "file".  Adjust error message.
+	(dwarf2_directive_filename): Use an unsigned type for "num".
+	Catch truncation of file number and overflow of get_filenum
+	XRESIZEVEC multiplication.  Delete dead code.
+
+2019-05-15  Alan Modra  <amodra@gmail.com>
+
 	PR 24538
 	* config/tc-tic54x.c (tic54x_start_line_hook): Do skip end of line
 	chars in setting endp.
@@ -256,7 +264,7 @@
 
 2019-04-29  John Darrington <john@darrington.wattle.id.au>
 
-        * testsuite/gas/s12z/truncated.d: New file.
+	* testsuite/gas/s12z/truncated.d: New file.
 	* testsuite/gas/s12z/truncated.s: New file.
 	* testsuite/gas/s12z/s12z.exp: Add new test.
 
@@ -509,7 +517,7 @@
 	* testsuite/gas/arm/archv8m_1m-cmse-main.s: Likewise.
 
 2019-04-15  Sudakshina Das  <sudi.das@arm.com>
-            Andre Vieira  <andre.simoesdiasvieira@arm.com>
+	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
 
 	* config/tc-arm.c (operand_parse_code): Add OP_LR and OP_oLR
 	for the LR operand and optional LR operand.
@@ -531,7 +539,7 @@
 	* testsuite/gas/arm/armv8_1-m-tloop-bad.l: New.
 
 2019-04-15  Sudakshina Das  <sudi.das@arm.com>
-            Andre Vieira  <andre.simoesdiasvieira@arm.com>
+	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
 
 	* config/tc-arm.c (T16_32_TAB): New entriy for bfcsel.
 	(do_t_v8_1_branch): New switch case for bfcsel.
@@ -552,7 +560,7 @@
 	(tc_gen_reloc): Likewise.
 
 2019-04-15  Sudakshina Das  <sudi.das@arm.com>
-            Andre Vieira  <andre.simoesdiasvieira@arm.com>
+	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
 
 	* config/tc-arm.c (T16_32_TAB): New entrie for bfl.
 	(do_t_v8_1_branch): New switch case for bfl.
@@ -584,7 +592,7 @@
 	* testsuite/gas/arm/armv8_1-m-bf-exchange-bad.d: New
 
 2019-04-15  Sudakshina Das  <sudi.das@arm.com>
-            Andre Vieira  <andre.simoesdiasvieira@arm.com>
+	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
 
 	* config/tc-arm.c (T16_32_TAB): New entries for bf.
 	(do_t_branch_future): New.
@@ -660,11 +668,11 @@
 	* testsuite/gas/mips/mips.exp: Run the new test.
 
 2019-04-12  John Darrington <john@darrington.wattle.id.au>
-	
+
 	config/tc-s12z.h: Remove definition of macro TC_M68K
 
 2019-04-01  John Darrington <john@darrington.wattle.id.au>
-	
+
 	config/tc-s12z.c: Use bfd_boolean where appropriate.
 
 2019-04-11  Max Filippov  <jcmvbkbc@gmail.com>
@@ -1292,7 +1300,7 @@
 
 2019-01-31  John Darrington <john@darrington.wattle.id.au>
 
-        * config/tc-s12z.c (lex_imm): Add new argument exp_o.
+	* config/tc-s12z.c (lex_imm): Add new argument exp_o.
 	(emit_reloc): New function.
 	(md_apply_fix): [BFD_RELOC_S12Z_OPR] Recognise that it
 	can be either 2 bytes or 3 bytes long.
@@ -1545,7 +1553,7 @@
 
 2019-01-09  John Darrington <john@darrington.wattle.id.au>
 
-        * testsuite/gas/s12z/jsr.s: New case.
+	* testsuite/gas/s12z/jsr.s: New case.
 	* testsuite/gas/s12z/jsr.d: New case.
 
 2019-01-09  Andrew Paprocki  <andrew@ishiboo.com>
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index cc36957..5f804f1 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -754,7 +754,7 @@ get_filenum (const char *filename, unsigned int num)
       /* Catch wraparound.  */
       if (files_allocated <= old)
 	{
-	  as_bad (_("file number %u is too big"), i);
+	  as_bad (_("file number %lu is too big"), (unsigned long) i);
 	  return 0;
 	}
 
@@ -762,7 +762,7 @@ get_filenum (const char *filename, unsigned int num)
       memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
     }
 
-  files[i].filename = num ? file : xstrdup (file);
+  files[i].filename = file;
   files[i].dir = dir;
   if (files_in_use < i + 1)
     files_in_use = i + 1;
@@ -781,7 +781,7 @@ get_filenum (const char *filename, unsigned int num)
 char *
 dwarf2_directive_filename (void)
 {
-  offsetT num;
+  valueT num;
   char *filename;
   int filename_len;
 
@@ -799,7 +799,7 @@ dwarf2_directive_filename (void)
     return NULL;
   demand_empty_rest_of_line ();
 
-  if (num < 1)
+  if ((offsetT) num < 1)
     {
       as_bad (_("file number less than one"));
       return NULL;
@@ -809,14 +809,15 @@ dwarf2_directive_filename (void)
      being supplied.  Turn off gas generated debug info.  */
   debug_type = DEBUG_NONE;
 
-  if (num < (offsetT) files_in_use && files[num].filename != 0)
+  if (num != (unsigned int) num
+      || num >= (size_t) -1 / sizeof (struct file_entry) - 32)
     {
-      as_bad (_("file number %ld already allocated"), (long) num);
+      as_bad (_("file number %lu is too big"), (unsigned long) num);
       return NULL;
     }
-  else if (num < 0)
+  if (num < files_in_use && files[num].filename != 0)
     {
-      as_bad (_("file number %ld is too small!"), (long) num);
+      as_bad (_("file number %u already allocated"), (unsigned int) num);
       return NULL;
     }
 
@@ -1172,10 +1173,10 @@ scale_addr_delta (addressT *addr_delta)
   if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
     {
       if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0  && !printed_this)
-        {
+	{
 	  as_bad("unaligned opcodes detected in executable segment");
-          printed_this = 1;
-        }
+	  printed_this = 1;
+	}
       *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
     }
 }
@@ -1750,10 +1751,10 @@ out_file_list (void)
       out_uleb128 (files[i].dir);	/* directory number */
       /* Output the last modification timestamp.  */
       out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
-				          files[i].dir ? dirs [files [i].dir] : ""));
+					  files[i].dir ? dirs [files [i].dir] : ""));
       /* Output the filesize.  */
       out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
-				          files[i].dir ? dirs [files [i].dir] : ""));
+					  files[i].dir ? dirs [files [i].dir] : ""));
     }
 
   /* Terminate filename list.  */


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