svn commit: samba r6449 - in branches/tmp/pidl2/source: build/pidl librpc/ndr librpc/rpc

jelmer at samba.org jelmer at samba.org
Sun Apr 24 07:33:51 GMT 2005


Author: jelmer
Date: 2005-04-24 07:33:50 +0000 (Sun, 24 Apr 2005)
New Revision: 6449

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

Log:
Some more fixes and name fixes (conformant arrays are treated differently 
of regular arrays in only one place now)

Modified:
   branches/tmp/pidl2/source/build/pidl/ndr.pm
   branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
   branches/tmp/pidl2/source/librpc/ndr/libndr.h
   branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c
   branches/tmp/pidl2/source/librpc/rpc/dcerpc.c


Changeset:
Modified: branches/tmp/pidl2/source/build/pidl/ndr.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr.pm	2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/build/pidl/ndr.pm	2005-04-24 07:33:50 UTC (rev 6449)
@@ -213,8 +213,11 @@
 {
 	my $e = shift;
 
-	return ($e->{TYPE} eq "string") and
-		util::property_matches($e, "flag", ".*LIBNDR_FLAG_STR_CONFORMANT.*");
+	return 0; #FIXME
+
+	return ($e->{TYPE} eq "string") and ($e->{POINTERS} == 0) 
+		and util::property_matches($e, "flag", ".*LIBNDR_FLAG_STR_CONFORMANT.*") 
+		and $e->{PARENT}->{TYPE} ne "FUNCTION";
 }
 
 #####################################################################

Modified: branches/tmp/pidl2/source/build/pidl/ndr_parser.pm
===================================================================
--- branches/tmp/pidl2/source/build/pidl/ndr_parser.pm	2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/build/pidl/ndr_parser.pm	2005-04-24 07:33:50 UTC (rev 6449)
@@ -296,36 +296,6 @@
 	}
 }
 
-#####################################################################
-# check the size_is and length_is constraints
-sub CheckArraySizes($$$$)
-{
-	my $e = shift;
-	my $l = shift;
-	my $var_name = shift;
-	my $env = shift;
-
-	if ($l->{IS_CONFORMANT}) {
-		my $size = ParseExpr($l->{SIZE_IS}, $env);
-		pidl "if ($var_name) {";
-		indent;
-		check_null_pointer($size);
-		pidl "NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));";
-		deindent;
-		pidl "}";
-	}
-
-	if ($l->{IS_VARYING}) {
-		my $length = ParseExpr($l->{LENGTH_IS}, $env);
-		pidl "if ($var_name) {";
-		indent;
-		check_null_pointer($length);
-		pidl "NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));";
-		deindent;
-		pidl "}"
-	}
-}
-
 sub ParseArrayPullPreceding($$$$)
 {
 	my $e = shift;
@@ -369,9 +339,6 @@
 		ParseArrayPullPreceding($e, $l, $var_name, $ndr_flags);
 	}
 
-	if (!$l->{IS_FIXED}) {
-		AllocateArrayLevel($e,$l,$ndr,$env,$size);
-	}
 
 	if ($l->{IS_VARYING}) {
 		pidl "NDR_CHECK(ndr_pull_array_length($ndr, " . get_pointer_to($var_name) . "));";
@@ -383,11 +350,27 @@
 	if ($length ne $size) {
 		pidl "if ($length > $size) {";
 		indent;
-		pidl "return ndr_pull_error($ndr, NDR_ERR_CONFORMANT_SIZE, \"Bad conformant size %u should be %u\", $size, $length);";
+		pidl "return ndr_pull_error($ndr, NDR_ERR_ARRAY_SIZE, \"Bad array size %u should exceed array length %u\", $size, $length);";
 		deindent;
 		pidl "}";
 	}
 
+	if ($l->{IS_CONFORMANT}) {
+		my $size = ParseExpr($l->{SIZE_IS}, $env);
+		check_null_pointer($size);
+		pidl "NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));";
+	}
+
+	if ($l->{IS_VARYING}) {
+		my $length = ParseExpr($l->{LENGTH_IS}, $env);
+		check_null_pointer($length);
+		pidl "NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));";
+	}
+
+	if (!$l->{IS_FIXED}) {
+		AllocateArrayLevel($e,$l,$ndr,$env,$size);
+	}
+
 	if (Ndr::is_scalar_type($e->{TYPE})) {
 		pidl "NDR_CHECK(ndr_pull_array_$e->{TYPE}($ndr, $ndr_flags, $var_name, $length));";
 	} else {
@@ -623,7 +606,7 @@
 	}
 
 	my $advance;
-	if (defined($l->{SUBCONTEXT_SIZE})) {
+	if (defined($l->{SUBCONTEXT_SIZE}) and ($l->{SUBCONTEXT_SIZE} ne "-1")) {
 		$advance = $l->{SUBCONTEXT_SIZE};
 	} elsif ($l->{HEADER_SIZE}) {
 		$advance = "$ndr->data_size";
@@ -1004,6 +987,7 @@
 	}
 
 	pidl "NDR_ALLOC($ndr, $var_name);";
+	#pidl "memset($var_name, 0, sizeof($var_name));";
 	if ($l->{POINTER_TYPE} eq "relative") {
 		pidl "NDR_CHECK(ndr_pull_relative_ptr1($ndr, $var_name, _ptr_$e->{NAME}));";
 	}
@@ -1336,13 +1320,6 @@
 		ParseElementPull($e, "ndr", "r->", $env, 0, 1);
 	}
 
-	foreach my $e (@{$struct->{ELEMENTS}}) {
-		foreach my $l (@{$e->{LEVELS}}) {
-			next unless ($l->{TYPE} eq "ARRAY");
-			CheckArraySizes($e, $l, "r->$e->{NAME}", $env);
-		}
-	}
-
 	pidl "ndr_pull_struct_end(ndr);";
 
 	pidl "done:";
@@ -1829,24 +1806,13 @@
 
 	check_null_pointer($size);
 	pidl "NDR_ALLOC_N($ndr, $var, $size);";
+	#pidl "memset($var, 0, $size * sizeof(" . $var . "[0]));";
 	if (grep(/in/,@{$e->{DIRECTION}}) and
 	    grep(/out/,@{$e->{DIRECTION}})) {
 		pidl "memcpy(r->out.$e->{NAME},r->in.$e->{NAME},$size * sizeof(*r->in.$e->{NAME}));";
 	}
 }
 
-sub AllocateDataLevel($$$$)
-{
-	my $e = shift;
-	my $l = shift;
-	my $ndr = shift;
-	my $env = shift;
-
-	my $var = ParseExpr($e->{NAME}, $env);
-
-	pidl "NDR_ALLOC($ndr, $var);";
-}
-
 #####################################################################
 # parse a function
 sub ParseFunctionPull($)
@@ -1893,14 +1859,6 @@
 		ParseElementPull($e, "ndr", "r->in.", $env, 1, 1);
 	}
 
-	foreach my $e (@{$fn->{ELEMENTS}}) {
-		next unless grep (/in/, @{$e->{DIRECTION}});
-		foreach my $l (@{$e->{LEVELS}}) {
-			next unless ($l->{TYPE} eq "ARRAY");
-			CheckArraySizes($e, $l, "r->in.$e->{NAME}", $env);
-		}
-	}
-
 	pidl "ndr_out:";
 	pidl "if (!(flags & NDR_OUT)) goto done;";
 	pidl "";
@@ -1910,14 +1868,6 @@
 		ParseElementPull($e, "ndr", "r->out.", $env, 1, 1);
 	}
 
-	foreach my $e (@{$fn->{ELEMENTS}}) {
-		next unless grep(/out/, @{$e->{DIRECTION}});
-		foreach my $l (@{$e->{LEVELS}}) {
-			next unless ($l->{TYPE} eq "ARRAY");
-			CheckArraySizes($e, $l, "r->out.$e->{NAME}", $env);
-		}
-	}
-
 	if ($fn->{RETURN_TYPE}) {
 		pidl "NDR_CHECK(ndr_pull_$fn->{RETURN_TYPE}(ndr, NDR_SCALARS, &r->out.result));";
 	}

Modified: branches/tmp/pidl2/source/librpc/ndr/libndr.h
===================================================================
--- branches/tmp/pidl2/source/librpc/ndr/libndr.h	2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/librpc/ndr/libndr.h	2005-04-24 07:33:50 UTC (rev 6449)
@@ -145,7 +145,6 @@
 
 
 enum ndr_err_code {
-	NDR_ERR_CONFORMANT_SIZE,
 	NDR_ERR_ARRAY_SIZE,
 	NDR_ERR_BAD_SWITCH,
 	NDR_ERR_OFFSET,

Modified: branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c
===================================================================
--- branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c	2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/librpc/ndr/ndr_sec.c	2005-04-24 07:33:50 UTC (rev 6449)
@@ -37,8 +37,8 @@
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &num_auths));
 	NDR_CHECK(ndr_pull_dom_sid(ndr, ndr_flags, sid));
 	if (sid->num_auths != num_auths) {
-		return ndr_pull_error(ndr, NDR_ERR_CONFORMANT_SIZE, 
-				      "Bad conformant size %u should be %u", 
+		return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, 
+				      "Bad array size %u should exceed %u", 
 				      num_auths, sid->num_auths);
 	}
 	return NT_STATUS_OK;

Modified: branches/tmp/pidl2/source/librpc/rpc/dcerpc.c
===================================================================
--- branches/tmp/pidl2/source/librpc/rpc/dcerpc.c	2005-04-24 06:12:51 UTC (rev 6448)
+++ branches/tmp/pidl2/source/librpc/rpc/dcerpc.c	2005-04-24 07:33:50 UTC (rev 6449)
@@ -1277,7 +1277,7 @@
 	if (pull->offset != pull->data_size) {
 		DEBUG(0,("Warning! ignoring %d unread bytes in rpc packet!\n", 
 			 pull->data_size - pull->offset));
-		/* we used return NT_STATUS_INFO_LENGTH_MISMATCH here,
+		/* we used to return NT_STATUS_INFO_LENGTH_MISMATCH here,
 		   but it turns out that early versions of NT
 		   (specifically NT3.1) add junk onto the end of rpc
 		   packets, so if we want to interoperate at all with



More information about the samba-cvs mailing list