Author: jra Date: 2006-06-28 02:22:24 +0000 (Wed, 28 Jun 2006) New Revision: 16602
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16602 Log: Klockwork #2028. Fix null deref on error path. Jeremy. Modified: trunk/source/registry/reg_printing.c Changeset: Modified: trunk/source/registry/reg_printing.c =================================================================== --- trunk/source/registry/reg_printing.c 2006-06-28 02:12:53 UTC (rev 16601) +++ trunk/source/registry/reg_printing.c 2006-06-28 02:22:24 UTC (rev 16602) @@ -225,7 +225,9 @@ /* get information for a specific printer */ - reg_split_path( printers_key, &printername, &printerdatakey ); + if (!reg_split_path( printers_key, &printername, &printerdatakey )) { + return -1; + } /* validate the printer name */ @@ -314,7 +316,9 @@ return add_printers_by_registry( subkeys ); } - reg_split_path( printers_key, &printername, &printerdatakey ); + if (!reg_split_path( printers_key, &printername, &printerdatakey )) { + return False; + } /* lookup the printer */ @@ -482,7 +486,10 @@ /* lookup the printer object */ - reg_split_path( printers_key, &printername, &printerdatakey ); + if (!reg_split_path( printers_key, &printername, &printerdatakey )) { + return -1; + } + if ( !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) ) goto done; @@ -672,7 +679,9 @@ return regdb_store_values( KEY_WINNT_PRINTERS, values ); } - reg_split_path( printers_key, &printername, &keyname ); + if (!reg_split_path( printers_key, &printername, &keyname )) { + return False; + } if ( !W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, printername) ) ) return False; @@ -754,7 +763,9 @@ pstrcpy( key2, keystr ); keystr = key2; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } /* sanity check */ @@ -777,7 +788,9 @@ /* more of the key path to process */ keystr = subkeypath; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } /* ...\Print\Environements\...\Drivers\ */ @@ -809,7 +822,9 @@ if ( strequal(base, "Print Processors") ) { keystr = subkeypath; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } /* no subkeys below this point */ @@ -824,7 +839,10 @@ /* only dealing with drivers from here on out */ keystr = subkeypath; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } + version = atoi(&base[strlen(base)-1]); switch (env_index) { @@ -947,7 +965,9 @@ NT_PRINTER_DRIVER_INFO_LEVEL driver_ctr; WERROR w_result; - reg_split_path( key, &base, &subkeypath ); + if (!reg_split_path( key, &base, &subkeypath )) { + return -1; + } /* no values in 'Environments\Drivers\Windows NT x86' */ @@ -964,7 +984,9 @@ fstrcpy( arch_environment, base ); keystr = subkeypath; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } if ( strequal(base, "Print Processors") ) return 0; @@ -981,7 +1003,9 @@ The subkey name has to be Version-XX */ keystr = subkeypath; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } if ( !subkeypath ) return 0; @@ -991,7 +1015,9 @@ /* BEGIN PRINTER DRIVER NAME BLOCK */ keystr = subkeypath; - reg_split_path( keystr, &base, &subkeypath ); + if (!reg_split_path( keystr, &base, &subkeypath )) { + return -1; + } /* don't go any deeper for now */