From a3d29174fbad5d448af52daf7e542651c9bf0ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0tampar?= Date: Fri, 25 Sep 2026 11:32:30 +0200 Subject: [PATCH] Fixes intermittent pypy-2.7 CI failure (kb.reportTaskId test leak) --- lib/core/settings.py | 2 +- tests/test_report.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index c6dc09eb5..ca2e9f3dc 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -20,7 +20,7 @@ from lib.core.enums import OS from thirdparty import six # sqlmap version (...) -VERSION = "1.10.9.23" +VERSION = "1.10.9.24" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) diff --git a/tests/test_report.py b/tests/test_report.py index 9130dfb2a..9b2ab3ee9 100644 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -235,6 +235,7 @@ class TestMultiTargetTaskId(_CollectorCase): def setUp(self): super(TestMultiTargetTaskId, self).setUp() from lib.core.dump import Dump + self._had_reportTaskId = "reportTaskId" in kb self._saved_reportTaskId = kb.get("reportTaskId") self._saved_dumper = conf.get("dumper") self._saved_reportCollector = conf.get("reportCollector") @@ -242,7 +243,17 @@ class TestMultiTargetTaskId(_CollectorCase): conf.reportCollector = self.c def tearDown(self): - kb.reportTaskId = self._saved_reportTaskId + # restore to the PRIOR STATE exactly - if the key was absent before (the common case, since + # kb.reportTaskId is normally set lazily by a multi-target run), setting it to the saved None + # would instead leave it explicitly present with value None, which breaks the + # kb.get("reportTaskId", REPORT_TASKID) fallback used elsewhere (e.g. ReportErrorRecorder.emit()) + # for the rest of the test process - order-dependent flakiness, since Python 2's unittest + # discover() does not sort tests/ (unlike Python 3's), so this class can run before + # TestReportErrorCapture depending on the checkout's raw directory order + if self._had_reportTaskId: + kb.reportTaskId = self._saved_reportTaskId + else: + del kb.reportTaskId conf.dumper = self._saved_dumper conf.reportCollector = self._saved_reportCollector super(TestMultiTargetTaskId, self).tearDown()