]> granicus.if.org Git - sudo/commitdiff
In fill_args(), replace loop that increments arg_size() with
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 4 May 2016 22:59:04 +0000 (16:59 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 4 May 2016 22:59:04 +0000 (16:59 -0600)
a simple add and mask.  Should prevent a false positive from
Coverity CID 104094.

plugins/sudoers/toke.h
plugins/sudoers/toke_util.c

index c6a2db5792edf31c40751a904b68dac779adadaf..5b13e67104ce3197d49f3efe7ac130a5efb6cafc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2013 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 2011-2013, 2015-2016 Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -31,9 +31,6 @@ extern int (*trace_print)(const char *msg);
 
 #define fill(a, b)     fill_txt(a, b, 0)
 
-/* realloc() to size + COMMANDARGINC to make room for command args */
-#define COMMANDARGINC   64
-
 #define LEXTRACE(msg)   do {                                           \
     if (trace_print != NULL)                                           \
        (*trace_print)(msg);                                            \
index a8989459a63d751352dd10daad4370d4838c86d5..be46782f966f9c7c96e23092f113f94237323c3b 100644 (file)
@@ -138,9 +138,8 @@ fill_args(const char *s, size_t len, int addspace)
        new_len = arg_len + len + addspace;
 
     if (new_len >= arg_size) {
-       /* Allocate more space than we need for subsequent args */
-       while (new_len >= (arg_size += COMMANDARGINC))
-           continue;
+       /* Allocate in increments of 128 bytes to avoid excessive realloc(). */
+       arg_size = (new_len + 127) & ~127;
 
        p = realloc(sudoerslval.command.args, arg_size);
        if (p == NULL) {