[PATCH] check types rather than segfault in pygpo.c
Douglas Bagnall
douglas.bagnall at catalyst.net.nz
Fri Apr 13 02:39:58 UTC 2018
I was trying to find good examples for another thread, and only found bad.
Douglas
-------------- next part --------------
From 3b39986d2dcdbcae0ada4c0e842c1367c3d89240 Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri, 13 Apr 2018 12:29:05 +1200
Subject: [PATCH 1/2] python.gpo: add a test showning a segfault
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
python/samba/tests/gpo.py | 7 +++++++
selftest/knownfail.d/python.gpo | 1 +
2 files changed, 8 insertions(+)
create mode 100644 selftest/knownfail.d/python.gpo
diff --git a/python/samba/tests/gpo.py b/python/samba/tests/gpo.py
index bdcbcc6c754..796a5cb06cb 100644
--- a/python/samba/tests/gpo.py
+++ b/python/samba/tests/gpo.py
@@ -50,6 +50,13 @@ class GPOTests(tests.TestCase):
assert gpos[i].ds_path == ds_paths[i], \
'ds_path did not match expected %s' % gpos[i].ds_path
+
+ def test_gpo_ads_does_not_segfault(self):
+ try:
+ ads = gpo.ADS_STRUCT(self.server, 42, self.creds)
+ except:
+ pass
+
def test_gpt_version(self):
global gpt_data
local_path = self.lp.get("path", "sysvol")
diff --git a/selftest/knownfail.d/python.gpo b/selftest/knownfail.d/python.gpo
new file mode 100644
index 00000000000..177b37e5697
--- /dev/null
+++ b/selftest/knownfail.d/python.gpo
@@ -0,0 +1 @@
+samba.tests.gpo
--
2.14.1
From 593cd9c59fe49fdfb871dd40b396a222085c562b Mon Sep 17 00:00:00 2001
From: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri, 13 Apr 2018 12:50:19 +1200
Subject: [PATCH 2/2] python.gpo.ADS_STRUCT: check type of loadparm argument
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
---
libgpo/pygpo.c | 9 ++++++++-
selftest/knownfail.d/python.gpo | 1 -
2 files changed, 8 insertions(+), 2 deletions(-)
delete mode 100644 selftest/knownfail.d/python.gpo
diff --git a/libgpo/pygpo.c b/libgpo/pygpo.c
index db336021125..60220a6bc2a 100644
--- a/libgpo/pygpo.c
+++ b/libgpo/pygpo.c
@@ -183,7 +183,14 @@ static int py_ads_init(ADS *self, PyObject *args, PyObject *kwds)
}
if (lp_obj) {
- bool ok;
+ bool ok = py_check_dcerpc_type(lp_obj, "samba.param",
+ "LoadParm");
+ if (!ok) {
+ PyErr_Format(PyExc_TypeError,
+ "Expected samba.param.LoadParm "
+ "for lp argument");
+ return -1;
+ }
lp_ctx = pytalloc_get_type(lp_obj, struct loadparm_context);
if (lp_ctx == NULL) {
return -1;
diff --git a/selftest/knownfail.d/python.gpo b/selftest/knownfail.d/python.gpo
deleted file mode 100644
index 177b37e5697..00000000000
--- a/selftest/knownfail.d/python.gpo
+++ /dev/null
@@ -1 +0,0 @@
-samba.tests.gpo
--
2.14.1
More information about the samba-technical
mailing list