svn commit: samba r9356 - in branches/SAMBA_4_0/source: build/pidl/Parse/Pidl/Samba/NDR librpc/ndr

tridge at samba.org tridge at samba.org
Wed Aug 17 12:28:48 GMT 2005


Author: tridge
Date: 2005-08-17 12:28:47 +0000 (Wed, 17 Aug 2005)
New Revision: 9356

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

Log:
a better way of coping with NULL arrays in the array bounds checking. This copes with the 
case of size_is(*size) where size is NULL, and the array is NULL


Modified:
   branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Samba/NDR/Parser.pm
   branches/SAMBA_4_0/source/librpc/ndr/ndr.c


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Samba/NDR/Parser.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Samba/NDR/Parser.pm	2005-08-17 12:27:28 UTC (rev 9355)
+++ branches/SAMBA_4_0/source/build/pidl/Parse/Pidl/Samba/NDR/Parser.pm	2005-08-17 12:28:47 UTC (rev 9356)
@@ -319,14 +319,18 @@
 
 	if ($l->{IS_CONFORMANT} and not $l->{IS_ZERO_TERMINATED}) {
 		my $size = ParseExpr($l->{SIZE_IS}, $env);
+		defer "if ($var_name) {";
 		check_null_pointer_deferred($size);
 		defer "NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));";
+		defer "}";
 	}
 
 	if ($l->{IS_VARYING} and not $l->{IS_ZERO_TERMINATED}) {
 		my $length = ParseExpr($l->{LENGTH_IS}, $env);
+		defer "if ($var_name) {";
 		check_null_pointer_deferred($length);
 		defer "NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));";
+		defer "}"
 	}
 
 	if (!$l->{IS_FIXED}) {

Modified: branches/SAMBA_4_0/source/librpc/ndr/ndr.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/ndr/ndr.c	2005-08-17 12:27:28 UTC (rev 9355)
+++ branches/SAMBA_4_0/source/librpc/ndr/ndr.c	2005-08-17 12:28:47 UTC (rev 9356)
@@ -493,10 +493,6 @@
 NTSTATUS ndr_check_array_size(struct ndr_pull *ndr, void *p, uint32_t size)
 {
 	uint32_t stored;
-	/* a NULL array is OK */
-	if (*(void **)p == NULL) {
-		return NT_STATUS_OK;
-	}
 	stored = ndr_token_peek(&ndr->array_size_list, p);
 	if (stored != size) {
 		return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, 
@@ -535,10 +531,6 @@
 NTSTATUS ndr_check_array_length(struct ndr_pull *ndr, void *p, uint32_t length)
 {
 	uint32_t stored;
-	/* a NULL array is OK */
-	if (*(void **)p == NULL) {
-		return NT_STATUS_OK;
-	}
 	stored = ndr_token_peek(&ndr->array_length_list, p);
 	if (stored != length) {
 		return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, 



More information about the samba-cvs mailing list