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