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

Re: PR22397, BFD internal error when message locale isn't C


On Sun, Nov 05, 2017 at 06:52:53PM +1030, Alan Modra wrote:
> This adds positional parameter support to the bfd error handler,

I was doing a little review of my code, which I should have done
before committing..

While an abort after storing out of bounds by one to an array in our
caller is probably OK in practice, it's better to check before storing.

	PR 22397
	* bfd.c (_bfd_doprnt_scan): Check args index before storing, not
	after.

diff --git a/bfd/bfd.c b/bfd/bfd.c
index 006fb2b..35f748c 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -974,10 +974,10 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
 		  arg_index = *ptr - '1';
 		  ptr += 2;
 		}
+	      if (arg_index >= 9)
+		abort ();
 	      args[arg_index].type = Int;
 	      arg_count++;
-	      if (arg_count > 9)
-		abort ();
 	    }
 	  else
 	    /* Handle explicit numeric value.  */
@@ -999,10 +999,10 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
 		      arg_index = *ptr - '1';
 		      ptr += 2;
 		    }
+		  if (arg_index >= 9)
+		    abort ();
 		  args[arg_index].type = Int;
 		  arg_count++;
-		  if (arg_count > 9)
-		    abort ();
 		}
 	      else
 		/* Handle explicit numeric value.  */
@@ -1032,6 +1032,8 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
 	  if ((int) arg_no < 0)
 	    arg_no = arg_count;
 
+	  if (arg_no >= 9)
+	    abort ();
 	  switch (ptr[-1])
 	    {
 	    case 'd':
@@ -1100,8 +1102,6 @@ _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
 	      abort();
 	    }
 	  arg_count++;
-	  if (arg_count > 9)
-	    abort ();
 	}
     }
 

-- 
Alan Modra
Australia Development Lab, IBM


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