svn commit: samba r19292 - in branches/SAMBA_3_0/source/rpc_server: .

vlendec at samba.org vlendec at samba.org
Sun Oct 15 16:06:11 GMT 2006


Author: vlendec
Date: 2006-10-15 16:06:10 +0000 (Sun, 15 Oct 2006)
New Revision: 19292

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

Log:
Avoid some potential segfaults: In winreg_EnumValue all pointers are unique
pointers and can thus be independently NULL.

Thanks,

Volker

Modified:
   branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c


Changeset:
Modified: branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c	2006-10-15 15:14:04 UTC (rev 19291)
+++ branches/SAMBA_3_0/source/rpc_server/srv_winreg_nt.c	2006-10-15 16:06:10 UTC (rev 19292)
@@ -613,19 +613,31 @@
 		status = WERR_NOMEM;
 	}
 
-	*value_length =  regval_size( val );
-	*type = val->type;
+	if (type != NULL) {
+		*type = val->type;
+	}
 
-	if ( *data_size == 0 || !data ) {
+	if (data != NULL) {
+		if ((data_size == NULL) || (value_length == NULL)) {
+			status = WERR_INVALID_PARAM;
+			goto done;
+		}
+
+		if (regval_size(val) > *data_size) {
+			status = WERR_MORE_DATA;
+			goto done;
+		}
+
+		memcpy( data, regval_data_p(val), regval_size(val) );
 		status = WERR_OK;
-	} else if ( *value_length > *data_size ) {
-		status = WERR_MORE_DATA;
-	} else {
-		memcpy( data, regval_data_p(val), *value_length );
-		status = WERR_OK;
 	}
 
-	*data_size = *value_length;
+	if (value_length != NULL) {
+		*value_length = regval_size( val );
+	}
+	if (data_size != NULL) {
+		*data_size = regval_size( val );
+	}
 
 done:	
 	free_registry_value( val );



More information about the samba-cvs mailing list