Support aligning text section from odd addresses
[deliverable/binutils-gdb.git] / gas / read.c
index 2f756db862d20170aa071cf387caaf518954037b..9d35766a6a93142095ee3737ab47b47dd44d09c0 100644 (file)
@@ -3394,11 +3394,20 @@ s_space (int mult)
        {
          offsetT i;
 
-         if (mult == 0)
-           mult = 1;
-         bytes = mult * exp.X_add_number;
-         for (i = 0; i < exp.X_add_number; i++)
-           emit_expr (&val, mult);
+         /* PR 20901: Check for excessive values.
+            FIXME: 1<<10 is an arbitrary limit.  Maybe use maxpagesize instead ?  */
+         if (exp.X_add_number < 0 || exp.X_add_number > (1 << 10))
+           as_bad (_("size value for space directive too large: %lx"),
+                   (long) exp.X_add_number);
+         else
+           {
+             if (mult == 0)
+               mult = 1;
+             bytes = mult * exp.X_add_number;
+
+             for (i = 0; i < exp.X_add_number; i++)
+               emit_expr (&val, mult);
+           }
        }
     }
   else
@@ -5533,6 +5542,12 @@ next_char_of_string (void)
   c = *input_line_pointer++ & CHAR_MASK;
   switch (c)
     {
+    case 0:
+      /* PR 20902: Do not advance past the end of the buffer.  */
+      -- input_line_pointer;
+      c = NOT_A_CHAR;
+      break;
+
     case '\"':
       c = NOT_A_CHAR;
       break;
@@ -5629,6 +5644,12 @@ next_char_of_string (void)
          bump_line_counters ();
          break;
 
+       case 0:
+         /* Do not advance past the end of the buffer.  */
+         -- input_line_pointer;
+         c = NOT_A_CHAR;
+         break;
+
        default:
 
 #ifdef ONLY_STANDARD_ESCAPES
This page took 0.023396 seconds and 4 git commands to generate.