From fe9b12b274028a1310ac6c59cc56ac36bb40ef5e Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Thu, 1 Aug 2019 23:29:55 +0000 Subject: pidl/ndr/python: avoid memory errors in getsetters This: $ python3 -c'from samba.dcerpc import lsa; x = lsa.EnumAccounts(); x.in_handle' should not raise a MemoryError, which is very unfriendly given that 'x.in_handle' is just named, not called, as far as the user is concerned. Returning None is the proper thing. Signed-off-by: Douglas Bagnall Reviewed-by: Noel Power Autobuild-User(master): Noel Power Autobuild-Date(master): Tue Aug 6 18:17:11 UTC 2019 on sn-devel-184 --- pidl/lib/Parse/Pidl/Samba4/Python.pm | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'pidl') diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm index 97c417adf35..8d5de31e7bb 100644 --- a/pidl/lib/Parse/Pidl/Samba4/Python.pm +++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm @@ -201,6 +201,14 @@ sub PythonElementGetSet($$$$$$) { $self->indent; $self->pidl("$cname *object = ($cname *)pytalloc_get_ptr(obj);"); $self->pidl("PyObject *py_$e->{NAME};"); + my $l = $e->{LEVELS}[0]; + if ($l->{TYPE} eq "POINTER") { + $self->pidl("if ($varname == NULL) {"); + $self->indent; + $self->pidl("Py_RETURN_NONE;"); + $self->deindent; + $self->pidl("}"); + } $self->ConvertObjectToPython("pytalloc_get_mem_ctx(obj)", $env, $e, $varname, "py_$e->{NAME}", "return NULL;"); $self->pidl("return py_$e->{NAME};"); $self->deindent; -- cgit v1.2.1