summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-03-15 13:14:48 +0100
committerKarolin Seeger <kseeger@samba.org>2012-04-10 16:48:07 +0200
commitab5560309afb2bad1aa02c82baeda3dbc0fc95be (patch)
tree03a0f722396e0531e0b1ec7a167aabf17a9169c3
parent46123de7b731f4a31ced95d993df1cb0116ebc2a (diff)
downloadsamba-ab5560309afb2bad1aa02c82baeda3dbc0fc95be.tar.gz
samba-ab5560309afb2bad1aa02c82baeda3dbc0fc95be.tar.bz2
samba-ab5560309afb2bad1aa02c82baeda3dbc0fc95be.zip
pidl/NDR/Parser: do array range validation in ParseArrayPullGetLength()
metze
-rw-r--r--pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm42
1 files changed, 14 insertions, 28 deletions
diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 3dfb52192b..541e52926d 100644
--- a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -361,6 +361,20 @@ sub ParseArrayPullGetLength($$$$$$;$)
$array_length = "length_$e->{NAME}_$l->{LEVEL_INDEX}";
}
+ if (my $range = has_property($e, "range")) {
+ my ($low, $high) = split(/,/, $range, 2);
+ if ($low < 0) {
+ warning(0, "$low is invalid for the range of an array size");
+ }
+ if ($low == 0) {
+ $self->pidl("if ($array_length > $high) {");
+ } else {
+ $self->pidl("if ($array_length < $low || $array_length > $high) {");
+ }
+ $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_RANGE, \"value out of range\");");
+ $self->pidl("}");
+ }
+
return $array_length;
}
@@ -1081,20 +1095,6 @@ sub ParseElementPullLevel
my $length = $self->ParseArrayPullHeader($e, $l, $ndr, $var_name, $env);
$array_length = $length;
- if (my $range = has_property($e, "range")) {
- my ($low, $high) = split(/,/, $range, 2);
- if ($low < 0) {
- warning(0, "$low is invalid for the range of an array size");
- }
- if ($low == 0) {
- $self->pidl("if ($length > $high) {");
- } else {
- $self->pidl("if ($length < $low || $length > $high) {");
- }
- $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_RANGE, \"value out of range\");");
- $self->pidl("}");
- }
-
my $nl = GetNextLevel($e, $l);
if (is_charset_array($e,$l)) {
@@ -1169,20 +1169,6 @@ sub ParseElementPullLevel
$length = $self->ParseArrayPullGetLength($e, $l, $ndr, $var_name, $env);
}
- if (my $range = has_property($e, "range")) {
- my ($low, $high) = split(/,/, $range, 2);
- if ($low < 0) {
- warning(0, "$low is invalid for the range of an array size");
- }
- if ($low == 0) {
- $self->pidl("if ($length > $high) {");
- } else {
- $self->pidl("if ($length < $low || $length > $high) {");
- }
- $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_RANGE, \"value out of range\");");
- $self->pidl("}");
- }
-
$var_name = get_array_element($var_name, $counter);
$self->ParseMemCtxPullStart($e, $l, $ndr, $array_name);