]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3533. [contrib] query-loc-0.4.0: memory leaks. [RT #32960]
authorMark Andrews <marka@isc.org>
Thu, 21 Mar 2013 22:55:29 +0000 (09:55 +1100)
committerMark Andrews <marka@isc.org>
Thu, 21 Mar 2013 22:55:29 +0000 (09:55 +1100)
3532.   [contrib]       zkt: fixed buffer overrun, resource leaks. [RT #32960]

CHANGES
contrib/query-loc-0.4.0/loc.c
contrib/zkt/dki.c
contrib/zkt/zkt-soaserial.c

diff --git a/CHANGES b/CHANGES
index 72c7640085879f5085edfde0ebd2221a9696e083..ed3a2ec1b683541adc1e25ccafbbdb137b30f80e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+3533.  [contrib]       query-loc-0.4.0: memory leaks. [RT #32960]
+
+3532.  [contrib]       zkt: fixed buffer overrun, resource leaks. [RT #32960]
+
 3531.  [bug]           win32: A uninitialized value could be returned on out
                        of memory. [RT #32960]
 
index 57e37370fcfc8f03f061bf39b8219d8e0612b88d..58cbcdfa4a97da3d2fc0811e72b64625f1b48ed9 100644 (file)
@@ -151,7 +151,8 @@ getlocbyaddr (addr, mask)
   struct in_addr netaddr;
   u_int32_t a;
   struct in_addr themask;
-  char *text_addr, *text_mask;
+  char text_addr[sizeof("255.255.255.255")],
+       text_mask[sizeof("255.255.255.255")];
 
   if (mask == NULL)
     {
@@ -162,13 +163,12 @@ getlocbyaddr (addr, mask)
       themask = *mask;
     }
 
-  text_addr = (char *) malloc (256);
-  text_mask = (char *) malloc (256);
   strcpy (text_addr, inet_ntoa (addr));
   strcpy (text_mask, inet_ntoa (themask));
 
   if (debug >= 2)
     printf ("Testing address %s/%s\n", text_addr, text_mask);
+
   if (mask == NULL)
     {
       a = ntohl (addr.s_addr);
index f42a75fa82f8b8782068e6cc5f776332a777fd90..5cd2fa21e6aa6f3decee68c15591c5a8982e7856 100644 (file)
@@ -70,7 +70,7 @@ static        dki_t   *dki_alloc ()
        dki_estr[0] = '\0';
        dki_t   *dkp = malloc (sizeof (dki_t));
 
-       if ( (dkp = malloc (sizeof (dki_t))) )
+       if ( dkp != NULL )
        {
                memset (dkp, 0, sizeof (dki_t));
                return dkp;
index ff107d9fabd32c724d3c6c49b29ad111ee325340..39f66d50fdf8cfb517b2f452838cab41e107183b 100644 (file)
@@ -120,14 +120,17 @@ static    int     read_serial_fromfile (const char *fname, unsigned long *serial)
        soafound = 0;
        while ( !soafound && fgets (buf, sizeof buf, fp) )
        {
-               if ( sscanf (buf, "%*s %*d IN SOA %255s %*s (\n", master) == 1 )
+               if ( sscanf (buf, "%*s %*d IN SOA %254s %*s (\n", master) == 1 )
                        soafound = 1;
-               else if ( sscanf (buf, "%*s IN SOA %255s %*s (\n", master) == 1 )
+               else if ( sscanf (buf, "%*s IN SOA %254s %*s (\n", master) == 1 )
                        soafound = 1;
        }
 
        if ( !soafound )
+       {
+               fclose (fp);
                return -2;      /* no zone file (soa not found) */
+       }
 
        /* move forward until any non ws is reached */
        while ( (c = getc (fp)) != EOF && isspace (c) )
@@ -136,7 +139,10 @@ static     int     read_serial_fromfile (const char *fname, unsigned long *serial)
 
        *serial = 0L;   /* read in the current serial number */
        if ( fscanf (fp, "%lu", serial) != 1 )  /* try to get serial no */
+       {
+               fclose (fp);
                return -3;      /* no serial number found */
+       }
 
        fclose (fp);