Author: jra
Date: 2006-06-20 19:06:57 +0000 (Tue, 20 Jun 2006)
New Revision: 16424

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16424

Log:
Fix possible null deref and a memory leak found by
examining Klockwork #1519. get_printer_subkeys()
could return zero without initializing it's return
pointer arg. Fixed this. Added free of subkey pointer
return in registry/reg_printing.c (interesting that
neithe Coverity or Klocwork found this one).
Jeremy.

Modified:
   branches/SAMBA_3_0/source/printing/nt_printing.c
   branches/SAMBA_3_0/source/registry/reg_printing.c


Changeset:
Modified: branches/SAMBA_3_0/source/printing/nt_printing.c
===================================================================
--- branches/SAMBA_3_0/source/printing/nt_printing.c    2006-06-20 19:06:50 UTC 
(rev 16423)
+++ branches/SAMBA_3_0/source/printing/nt_printing.c    2006-06-20 19:06:57 UTC 
(rev 16424)
@@ -2767,6 +2767,8 @@
        fstring *subkeys_ptr = NULL;
        fstring subkeyname;
        
+       *subkeys = NULL;
+
        if ( !data )
                return 0;
 

Modified: branches/SAMBA_3_0/source/registry/reg_printing.c
===================================================================
--- branches/SAMBA_3_0/source/registry/reg_printing.c   2006-06-20 19:06:50 UTC 
(rev 16423)
+++ branches/SAMBA_3_0/source/registry/reg_printing.c   2006-06-20 19:06:57 UTC 
(rev 16424)
@@ -346,8 +346,10 @@
                if ( lookup_printerkey(printer->info_2->data, subkeyname) == -1 
) {
                        DEBUG(5,("key_printers_store_keys: adding key %s\n", 
                                existing_subkeys[i]));
-                       if ( add_new_printer_key( printer->info_2->data, 
subkeyname ) == -1 ) 
+                       if ( add_new_printer_key( printer->info_2->data, 
subkeyname ) == -1 ) {
+                               SAFE_FREE( existing_subkeys );
                                return False;
+                       }
                }
        }
        
@@ -360,6 +362,8 @@
        if ( printer )
                free_a_printer( &printer, 2 );
 
+       SAFE_FREE( existing_subkeys );
+
        return True;
 }
 

Reply via email to