Adding missing calls to va_end().
authorTim Potter <tpot@samba.org>
Sun, 27 Jan 2008 06:31:56 +0000 (17:31 +1100)
committerVolker Lendecke <vl@samba.org>
Sun, 27 Jan 2008 08:33:42 +0000 (09:33 +0100)
Just a small commit to get a handle on this git thingy.  This patch
fixes some missing calls to va_end() to match various calls to va_start()
and VA_COPY().

Tim.
(This used to be commit ec367f307dff7948722b9ac97beb960efd91991f)

source3/lib/dprintf.c
source3/lib/util.c
source3/lib/util_tdb.c
source3/lib/xfile.c
source3/libsmb/ntlmssp_parse.c
source3/printing/print_generic.c

index 18b261623e693d30c7f22b983bf24d348a131d1c..a3bb5be43af53c226de31b8d2101cbc6d1a7f081 100644 (file)
 
        lang_msg_free(msgstr);
 
-       if (ret <= 0) return ret;
+       if (ret <= 0) {
+         va_end(ap2);
+         return ret;
+       }
 
        /* now we have the string in unix format, convert it to the display
           charset, but beware of it growing */
@@ -56,6 +59,7 @@ again:
        p2 = (char *)SMB_MALLOC(maxlen);
        if (!p2) {
                SAFE_FREE(p);
+               va_end(ap2);
                return -1;
        }
        clen = convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen, True);
@@ -72,6 +76,8 @@ again:
        ret = fwrite(p2, 1, clen, f);
        SAFE_FREE(p2);
 
+       va_end(ap2);
+
        return ret;
 }
 
index e5ac3752f5ed52bc73a790008e25ea3fe49fcb0d..dba7142bad35011c57029169252f5e75630b0411 100644 (file)
@@ -2431,6 +2431,7 @@ char *smb_xstrndup(const char *s, size_t n)
        if (n == -1 || ! *ptr) {
                smb_panic("smb_xvasprintf: out of memory");
        }
+       va_end(ap2);
        return n;
 }
 
index ce2cb427d118f8b8fa36dd56f35c8d663f00411b..dd5ebcd7ab5e1a3aa38a9d97fa4ef6193c50bb42 100644 (file)
@@ -656,6 +656,7 @@ int tdb_unpack(const uint8 *buf, int bufsize, const char *fmt, ...)
        return PTR_DIFF(buf, buf0);
 
  no_space:
+       va_end(ap);
        return -1;
 }
 
index c98522200b82a8401d62070e21ddadc77a32bf4d..ee6e5813329bb5e53221ec7101a70eafa66f48d7 100644 (file)
@@ -223,9 +223,15 @@ size_t x_fwrite(const void *p, size_t size, size_t nmemb, XFILE *f)
        VA_COPY(ap2, ap);
 
        len = vasprintf(&p, format, ap2);
-       if (len <= 0) return len;
+       if (len <= 0) {
+               va_end(ap2);
+               return len;
+       }
        ret = x_fwrite(p, 1, len, f);
        SAFE_FREE(p);
+
+       va_end(ap2);
+
        return ret;
 }
 
index ac8846ad1e079f875c2ea72deb03b2b0d660820b..70377cba7d50019998b24d7cf23a33ec5fa25781 100644 (file)
@@ -170,6 +170,7 @@ bool msrpc_gen(DATA_BLOB *blob,
 /* a helpful macro to avoid running over the end of our blob */
 #define NEED_DATA(amount) \
 if ((head_ofs + amount) > blob->length) { \
+        va_end(ap); \
         return False; \
 }
 
@@ -216,16 +217,20 @@ bool msrpc_parse(const DATA_BLOB *blob,
                                if ((len1 != len2) || (ptr + len1 < ptr) ||
                                                (ptr + len1 < len1) ||
                                                (ptr + len1 > blob->length)) {
+                                       va_end(ap);
                                        return false;
                                }
                                if (len1 & 1) {
                                        /* if odd length and unicode */
+                                       va_end(ap);
                                        return false;
                                }
                                if (blob->data + ptr <
                                                (uint8 *)(unsigned long)ptr ||
-                                               blob->data + ptr < blob->data)
+                                   blob->data + ptr < blob->data) {
+                                       va_end(ap);
                                        return false;
+                               }
 
                                if (0 < len1) {
                                        char *p = NULL;
@@ -261,13 +266,16 @@ bool msrpc_parse(const DATA_BLOB *blob,
                                if ((len1 != len2) || (ptr + len1 < ptr) ||
                                                (ptr + len1 < len1) ||
                                                (ptr + len1 > blob->length)) {
+                                       va_end(ap);
                                        return false;
                                }
 
                                if (blob->data + ptr <
                                                (uint8 *)(unsigned long)ptr ||
-                                               blob->data + ptr < blob->data)
+                                   blob->data + ptr < blob->data) {
+                                       va_end(ap);
                                        return false;
+                               }
 
                                if (0 < len1) {
                                        char *p = NULL;
@@ -304,13 +312,16 @@ bool msrpc_parse(const DATA_BLOB *blob,
                                if ((len1 != len2) || (ptr + len1 < ptr) ||
                                                (ptr + len1 < len1) ||
                                                (ptr + len1 > blob->length)) {
+                                       va_end(ap);
                                        return false;
                                }
 
                                if (blob->data + ptr <
                                                (uint8 *)(unsigned long)ptr ||
-                                               blob->data + ptr < blob->data)
+                                   blob->data + ptr < blob->data) {
+                                       va_end(ap);
                                        return false;
+                               }
 
                                *b = data_blob(blob->data + ptr, len1);
                        }
@@ -322,6 +333,7 @@ bool msrpc_parse(const DATA_BLOB *blob,
                        NEED_DATA(len1);
                        if (blob->data + head_ofs < (uint8 *)head_ofs ||
                                        blob->data + head_ofs < blob->data) {
+                               va_end(ap);
                                return false;
                        }
 
@@ -337,7 +349,8 @@ bool msrpc_parse(const DATA_BLOB *blob,
                        s = va_arg(ap, char *);
 
                        if (blob->data + head_ofs < (uint8 *)head_ofs ||
-                                       blob->data + head_ofs < blob->data) {
+                           blob->data + head_ofs < blob->data) {
+                               va_end(ap);
                                return false;
                        }
 
@@ -351,11 +364,13 @@ bool msrpc_parse(const DATA_BLOB *blob,
                                                blob->length - head_ofs,
                                                STR_ASCII|STR_TERMINATE);
                                if (ret == (size_t)-1 || p == NULL) {
+                                       va_end(ap);
                                        return false;
                                }
                                head_ofs += ret;
                                if (strcmp(s, p) != 0) {
                                        TALLOC_FREE(p);
+                                       va_end(ap);
                                        return false;
                                }
                                TALLOC_FREE(p);
index cc4b744a11c07ac1a32af1d8cd1a1ed5c41710a8..2a324fdd5c3d9aeefacd56faaa43898df012cf29 100644 (file)
@@ -41,15 +41,18 @@ static int print_run_command(int snum, const char* printername, bool do_sub,
        /* check for a valid system printername and valid command to run */
 
        if ( !printername || !*printername ) {
+               va_end(ap);
                return -1;
        }
 
        if (!command || !*command) {
+               va_end(ap);
                return -1;
        }
 
        syscmd = talloc_strdup(ctx, command);
        if (!syscmd) {
+               va_end(ap);
                return -1;
        }
 
@@ -57,6 +60,7 @@ static int print_run_command(int snum, const char* printername, bool do_sub,
                char *value = va_arg(ap,char *);
                syscmd = talloc_string_sub(ctx, syscmd, arg, value);
                if (!syscmd) {
+                       va_end(ap);
                        return -1;
                }
        }