summaryrefslogtreecommitdiff
path: root/pidl
diff options
context:
space:
mode:
authorTim Prouty <tprouty@samba.org>2009-01-15 10:51:57 -0800
committerTim Prouty <tprouty@samba.org>2009-01-15 14:52:35 -0800
commit7c861cac534801dd7938f07eeccd3680c84d3f30 (patch)
treebc976ce4a0578496254f274e2eaf5e9fac46c3f6 /pidl
parent3913d0a20547ad9c93255fdbc4fdf6629aa226b9 (diff)
downloadsamba-7c861cac534801dd7938f07eeccd3680c84d3f30.tar.gz
pidl: Add max property to be used instead of range for unsigned types.
Compilers complain about ranges starting at 0 for unsigned types, since an unsigned type is never less than 0. The max property implicitly makes 0 the lower bound when used with unsigned types.
Diffstat (limited to 'pidl')
-rw-r--r--pidl/lib/Parse/Pidl/Compat.pm1
-rw-r--r--pidl/lib/Parse/Pidl/NDR.pm1
-rw-r--r--pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm6
3 files changed, 8 insertions, 0 deletions
diff --git a/pidl/lib/Parse/Pidl/Compat.pm b/pidl/lib/Parse/Pidl/Compat.pm
index 1b49c439c43..58ba136591b 100644
--- a/pidl/lib/Parse/Pidl/Compat.pm
+++ b/pidl/lib/Parse/Pidl/Compat.pm
@@ -67,6 +67,7 @@ my %supported_properties = (
# array
"range" => ["ELEMENT"],
+ "max" => ["ELEMENT"],
"size_is" => ["ELEMENT"],
"string" => ["ELEMENT"],
"noheader" => ["ELEMENT"],
diff --git a/pidl/lib/Parse/Pidl/NDR.pm b/pidl/lib/Parse/Pidl/NDR.pm
index 5ee26d16b68..89632437c10 100644
--- a/pidl/lib/Parse/Pidl/NDR.pm
+++ b/pidl/lib/Parse/Pidl/NDR.pm
@@ -921,6 +921,7 @@ my %property_list = (
# array
"range" => ["ELEMENT"],
+ "max" => ["ELEMENT"],
"size_is" => ["ELEMENT"],
"string" => ["ELEMENT"],
"noheader" => ["ELEMENT"],
diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 0a4e44ef0ec..e2b14c10b1e 100644
--- a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -862,6 +862,12 @@ sub ParseDataPull($$$$$$$)
$self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_RANGE, \"value out of range\");");
$self->pidl("}");
}
+ if (my $max = has_property($e, "max")) {
+ $var_name = get_value_of($var_name);
+ $self->pidl("if ($var_name > $max) {");
+ $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_RANGE, \"value out of range\");");
+ $self->pidl("}");
+ }
} else {
$self->ParseTypePull($l->{DATA_TYPE}, $ndr, $var_name, $primitives, $deferred);
}