mirror of
https://github.com/samba-team/samba.git
synced 2025-01-13 13:18:06 +03:00
Works!!!...pidl/Samba4::NDR::Parser: fix support for embedded "ref" pointers
The memory allocation of embedded "ref" pointers needs to be the same as for all other embedded pointers. metze
This commit is contained in:
parent
6fcf2456d0
commit
8ebf16c074
@ -929,7 +929,7 @@ sub ParseMemCtxPullFlags($$$$)
|
||||
($nl->{DATA_TYPE} eq "string"));
|
||||
if ($next_is_array or $next_is_string) {
|
||||
return undef;
|
||||
} else {
|
||||
} elsif ($l->{LEVEL} eq "TOP") {
|
||||
$mem_flags = "LIBNDR_FLAG_REF_ALLOC";
|
||||
}
|
||||
}
|
||||
@ -1129,10 +1129,7 @@ sub ParsePtrPull($$$$$)
|
||||
my $next_is_string = (($nl->{TYPE} eq "DATA") and
|
||||
($nl->{DATA_TYPE} eq "string"));
|
||||
|
||||
if ($l->{POINTER_TYPE} eq "ref") {
|
||||
if ($l->{LEVEL} eq "EMBEDDED") {
|
||||
$self->pidl("NDR_CHECK(ndr_pull_ref_ptr($ndr, &_ptr_$e->{NAME}));");
|
||||
}
|
||||
if ($l->{POINTER_TYPE} eq "ref" and $l->{LEVEL} eq "TOP") {
|
||||
|
||||
if (!$next_is_array and !$next_is_string) {
|
||||
$self->pidl("if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {");
|
||||
@ -1141,16 +1138,19 @@ sub ParsePtrPull($$$$$)
|
||||
}
|
||||
|
||||
return;
|
||||
} elsif ($l->{POINTER_TYPE} eq "ref" and $l->{LEVEL} eq "EMBEDDED") {
|
||||
$self->pidl("NDR_CHECK(ndr_pull_ref_ptr($ndr, &_ptr_$e->{NAME}));");
|
||||
} elsif (($l->{POINTER_TYPE} eq "unique") or
|
||||
($l->{POINTER_TYPE} eq "relative") or
|
||||
($l->{POINTER_TYPE} eq "full")) {
|
||||
$self->pidl("NDR_CHECK(ndr_pull_generic_ptr($ndr, &_ptr_$e->{NAME}));");
|
||||
$self->pidl("if (_ptr_$e->{NAME}) {");
|
||||
$self->indent;
|
||||
} else {
|
||||
die("Unhandled pointer type $l->{POINTER_TYPE}");
|
||||
}
|
||||
|
||||
$self->pidl("if (_ptr_$e->{NAME}) {");
|
||||
$self->indent;
|
||||
|
||||
# Don't do this for arrays, they're allocated at the actual level
|
||||
# of the array
|
||||
unless ($next_is_array or $next_is_string) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user