]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
write overflow bug fix with cleanup
authorBVK Chaitanya <bvk.groups@gmail.com>
Fri, 21 May 2010 10:04:36 +0000 (15:34 +0530)
committerBVK Chaitanya <bvk.groups@gmail.com>
Fri, 21 May 2010 10:04:36 +0000 (15:34 +0530)
script/argv.c

index 56274f263fe5d350305d43d25a9a032d017eacd1..69322779db07e8403ce49d5233d3b50c498e31f9 100644 (file)
@@ -62,28 +62,18 @@ grub_script_argv_next (struct grub_script_argv *argv)
 {
   char **p = argv->args;
 
-  if (argv->argc == 0)
-    {
-      p = grub_malloc (2 * sizeof (char *));
-      if (! p)
-       return 1;
-
-      argv->argc = 1;
-      argv->args = p;
-      argv->args[0] = 0;
-      argv->args[1] = 0;
-      return 0;
-    }
-
-  if (! argv->args[argv->argc - 1])
+  if (argv->args && argv->args[argv->argc - 1] == 0)
     return 0;
 
-  p = grub_realloc (p, round_up_exp ((argv->argc + 1) * sizeof (char *)));
+  p = grub_realloc (p, round_up_exp ((argv->argc + 2) * sizeof (char *)));
   if (! p)
     return 1;
 
   argv->argc++;
   argv->args = p;
+
+  if (argv->argc == 1)
+    argv->args[0] = 0;
   argv->args[argv->argc] = 0;
   return 0;
 }