diff options
author | Tim Prouty <tprouty@samba.org> | 2009-01-15 10:51:57 -0800 |
---|---|---|
committer | Tim Prouty <tprouty@samba.org> | 2009-01-15 14:52:35 -0800 |
commit | 7c861cac534801dd7938f07eeccd3680c84d3f30 (patch) | |
tree | bc976ce4a0578496254f274e2eaf5e9fac46c3f6 /pidl | |
parent | 3913d0a20547ad9c93255fdbc4fdf6629aa226b9 (diff) | |
download | samba-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.pm | 1 | ||||
-rw-r--r-- | pidl/lib/Parse/Pidl/NDR.pm | 1 | ||||
-rw-r--r-- | pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm | 6 |
3 files changed, 8 insertions, 0 deletions
diff --git a/pidl/lib/Parse/Pidl/Compat.pm b/pidl/lib/Parse/Pidl/Compat.pm index 1b49c439c4..58ba136591 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 5ee26d16b6..89632437c1 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 0a4e44ef0e..e2b14c10b1 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); } |