pidl:Python: check the return values of talloc_ptrtype()
authorStefan Metzmacher <metze@samba.org>
Mon, 12 Sep 2016 13:12:50 +0000 (15:12 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 26 Oct 2016 09:20:18 +0000 (11:20 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
pidl/lib/Parse/Pidl/Samba4/Python.pm

index 07c18de3fb5e3782a936873f58889d9c03d2aecd..53937a29c640dcd46c2bffd40016b3397f1e0c39 100644 (file)
@@ -570,6 +570,12 @@ sub PythonFunctionPackIn($$$)
                        my $val = "PyList_GET_SIZE($py_var)";
                        if ($e->{LEVELS}[0]->{TYPE} eq "POINTER") {
                                $self->pidl("r->in.$e->{NAME} = talloc_ptrtype(r, r->in.$e->{NAME});");
+                               $self->pidl("if (r->in.$e->{NAME} == NULL) {");
+                               $self->indent;
+                               $self->pidl("PyErr_NoMemory();");
+                               $self->pidl($fail);
+                               $self->deindent;
+                               $self->pidl("}");
                                $self->pidl("*r->in.$e->{NAME} = $val;");
                        } else {
                                $self->pidl("r->in.$e->{NAME} = $val;");
@@ -1239,9 +1245,21 @@ sub ConvertObjectFromPythonLevel($$$$$$$$)
                # then this is where we would need to allocate it
                if ($l->{POINTER_TYPE} eq "ref") {
                        $self->pidl("$var_name = talloc_ptrtype($mem_ctx, $var_name);");
+                       $self->pidl("if ($var_name == NULL) {");
+                       $self->indent;
+                       $self->pidl("PyErr_NoMemory();");
+                       $self->pidl($fail);
+                       $self->deindent;
+                       $self->pidl("}");
                } elsif ($nl->{TYPE} eq "DATA" and Parse::Pidl::Typelist::is_scalar($nl->{DATA_TYPE})
                         and not Parse::Pidl::Typelist::scalar_is_reference($nl->{DATA_TYPE})) {
                        $self->pidl("$var_name = talloc_ptrtype($mem_ctx, $var_name);");
+                       $self->pidl("if ($var_name == NULL) {");
+                       $self->indent;
+                       $self->pidl("PyErr_NoMemory();");
+                       $self->pidl($fail);
+                       $self->deindent;
+                       $self->pidl("}");
                } else {
                        $self->pidl("$var_name = NULL;");
                }