]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/script/execute.c (grub_script_break): Clarify logic.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 12 Feb 2012 20:33:48 +0000 (21:33 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 12 Feb 2012 20:33:48 +0000 (21:33 +0100)
Better error handling.
(grub_script_return): Likewise.
* grub-core/script/lexer.c (grub_script_lexer_yywrap): Likewise.

ChangeLog
grub-core/script/execute.c
grub-core/script/lexer.c

index bb9c120a7b3c45a1d9294b150f2bb24da3db412a..bfed63980eb22abfdf3034d603bb214d015cebb0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-02-12  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/script/execute.c (grub_script_break): Clarify logic.
+       Better error handling.
+       (grub_script_return): Likewise.
+       * grub-core/script/lexer.c (grub_script_lexer_yywrap): Likewise.
+
 2012-02-12  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/lib/libgcrypt_wrap/cipher_wrap.h (__GNU_LIBRARY__): Avoid
index a95e1b6a02ba9edd2b6bda584029364d5586dff5..27968e1829d7feca1c8fdfc5dbf06529eef3efce 100644 (file)
@@ -77,10 +77,18 @@ grub_script_break (grub_command_t cmd, int argc, char *argv[])
 
   if (argc == 0)
     count = 1;
-
-  else if ((argc > 1) || (count = grub_strtoul (argv[0], &p, 10)) == 0 ||
-          (*p != '\0'))
-    return grub_error (GRUB_ERR_BAD_ARGUMENT, "bad break");
+  else if (argc > 1)
+    return  grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
+  else
+    {
+      count = grub_strtoul (argv[0], &p, 10);
+      if (grub_errno)
+       return grub_errno;
+      if (*p != '\0')
+       return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unrecognized number"));
+      if (count == 0)
+       return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't break 0 loops"));
+    }
 
   is_continue = grub_strcmp (cmd->name, "break") ? 1 : 0;
   active_breaks = count;
@@ -172,11 +180,14 @@ grub_script_return (grub_command_t cmd __attribute__((unused)),
     }
 
   n = grub_strtoul (argv[0], &p, 10);
+  if (grub_errno)
+    return grub_errno;
   if (*p != '\0')
-    return grub_error (GRUB_ERR_BAD_ARGUMENT, "bad argument");
+    return grub_error (GRUB_ERR_BAD_ARGUMENT,
+                      N_("unrecognized number"));
 
   function_return = 1;
-  return n ? grub_error (GRUB_ERR_TEST_FAILURE, "false") : GRUB_ERR_NONE;
+  return n ? grub_error (n, N_("false")) : GRUB_ERR_NONE;
 }
 
 static int
index 54d33cfd56659acf789bb412bef7751b372f0734..396d512770f062c18c2c24f4c30c01eaf9dad8a3 100644 (file)
@@ -130,7 +130,7 @@ int
 grub_script_lexer_yywrap (struct grub_parser_param *parserstate,
                          const char *input)
 {
-  int len = 0;
+  grub_size_t len = 0;
   char *p = 0;
   char *line = 0;
   YY_BUFFER_STATE buffer;
@@ -151,14 +151,21 @@ grub_script_lexer_yywrap (struct grub_parser_param *parserstate,
   else
     line = grub_strdup (input);
 
+  if (! line)
+    {
+      grub_script_yyerror (parserstate, N_("out of memory"));
+      return 1;
+    }
+
+  len = grub_strlen (line);
+
   /* Ensure '\n' at the end.  */
-  if (line && line[0] == '\0')
+  if (line[0] == '\0')
     {
       grub_free (line);
       line = grub_strdup ("\n");
     }
-
-  if (line && (len = grub_strlen(line)) && line[len - 1] != '\n')
+  else if (len && line[len - 1] != '\n')
     {
       p = grub_realloc (line, len + 2);
       if (p)