1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-02 00:22:11 +03:00

CVE-2020-27840: pytests: move Dn.validate test to ldb

We had the test in the Samba Python segfault suite because
a) the signal catching infrastructure was there, and
b) the ldb tests lack Samba's knownfail mechanism, which allowed us to
   assert the failure.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14595

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Douglas Bagnall
2021-02-11 16:28:43 +13:00
committed by Stefan Metzmacher
parent dbb3e65f7e
commit 9532c44bae
3 changed files with 46 additions and 6 deletions

View File

@ -0,0 +1,45 @@
#!/usr/bin/env python3
#
# Tests for crashing functions
import os
from unittest import TestCase
import os
import sys
import traceback
import ldb
def segfault_detector(f):
def wrapper(*args, **kwargs):
pid = os.fork()
if pid == 0:
# child, crashing?
try:
f(*args, **kwargs)
except Exception as e:
traceback.print_exc()
sys.stderr.flush()
sys.stdout.flush()
os._exit(0)
# parent, waiting
pid2, status = os.waitpid(pid, 0)
if os.WIFSIGNALED(status):
signal = os.WTERMSIG(status)
raise AssertionError("Failed with signal %d" % signal)
return wrapper
class LdbDnCrashTests(TestCase):
@segfault_detector
def test_ldb_dn_explode_crash(self):
for i in range(106, 150):
dn = ldb.Dn(ldb.Ldb(), "a=b%s,c= " % (' ' * i))
dn.validate()
if __name__ == '__main__':
import unittest
unittest.TestProgram()

View File

@ -614,6 +614,7 @@ def test(ctx):
os.mkdir(tmp_dir)
pyret = samba_utils.RUN_PYTHON_TESTS(
['tests/python/api.py',
'tests/python/crash.py',
'tests/python/index.py',
'tests/python/repack.py'],
extra_env={'SELFTEST_PREFIX': test_prefix})

View File

@ -184,9 +184,3 @@ class SegfaultTests(samba.tests.TestCase):
def test_dcerpc_idl_inline_arrays(self):
"""Inline arrays were incorrectly handled."""
dnsserver.DNS_RPC_SERVER_INFO_DOTNET().pExtensions
@segfault_detector
def test_ldb_dn_explode_crash(self):
for i in range(106, 550, 5):
dn = ldb.Dn(ldb.Ldb(), "a=b%s,c= " % (' ' * i))
dn.validate()