Patches 383 and 384 were merged upstream. Patch 385 was partially merged upstream, the PR with test is still open.
78 lines
3.0 KiB
Diff
78 lines
3.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
|
Date: Fri, 8 Jul 2022 12:19:43 +0200
|
|
Subject: [PATCH] 00385: gh-94675: Add a regression test for rjsmin re slowdown
|
|
|
|
This tests a speed regression in the re module
|
|
which prevented chromium from building in Fedora.
|
|
|
|
https://github.com/python/cpython/pull/94685
|
|
---
|
|
Lib/test/test_re.py | 31 ++++++++++++++++++-
|
|
...2-07-08-12-22-00.gh-issue-94675.IiTs5f.rst | 1 +
|
|
2 files changed, 31 insertions(+), 1 deletion(-)
|
|
create mode 100644 Misc/NEWS.d/next/Tests/2022-07-08-12-22-00.gh-issue-94675.IiTs5f.rst
|
|
|
|
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
|
|
index ab980793fa..5d946370ee 100644
|
|
--- a/Lib/test/test_re.py
|
|
+++ b/Lib/test/test_re.py
|
|
@@ -1,6 +1,7 @@
|
|
from test.support import (gc_collect, bigmemtest, _2G,
|
|
cpython_only, captured_stdout,
|
|
- check_disallow_instantiation, is_emscripten, is_wasi)
|
|
+ check_disallow_instantiation, is_emscripten, is_wasi,
|
|
+ SHORT_TIMEOUT)
|
|
import locale
|
|
import re
|
|
import string
|
|
@@ -11,6 +12,14 @@
|
|
from re import Scanner
|
|
from weakref import proxy
|
|
|
|
+# some platforms lack working multiprocessing
|
|
+try:
|
|
+ import _multiprocessing
|
|
+except ImportError:
|
|
+ multiprocessing = None
|
|
+else:
|
|
+ import multiprocessing
|
|
+
|
|
# Misc tests from Tim Peters' re.doc
|
|
|
|
# WARNING: Don't change details in these tests if you don't know
|
|
@@ -2438,6 +2447,26 @@ def test_template_function_and_flag_is_deprecated(self):
|
|
self.assertTrue(template_re1.match('ahoy'))
|
|
self.assertFalse(template_re1.match('nope'))
|
|
|
|
+ @unittest.skipIf(multiprocessing is None, 'test requires multiprocessing')
|
|
+ def test_regression_gh94675(self):
|
|
+ pattern = re.compile(r'(?<=[({}])(((//[^\n]*)?[\n])([\000-\040])*)*'
|
|
+ r'((/[^/\[\n]*(([^\n]|(\[\n]*(]*)*\]))'
|
|
+ r'[^/\[]*)*/))((((//[^\n]*)?[\n])'
|
|
+ r'([\000-\040]|(/\*[^*]*\*+'
|
|
+ r'([^/*]\*+)*/))*)+(?=[^\000-\040);\]}]))')
|
|
+ input_js = '''a(function() {
|
|
+ ///////////////////////////////////////////////////////////////////
|
|
+ });'''
|
|
+ p = multiprocessing.Process(target=pattern.sub, args=('', input_js))
|
|
+ p.start()
|
|
+ p.join(SHORT_TIMEOUT)
|
|
+ try:
|
|
+ self.assertFalse(p.is_alive(), 'pattern.sub() timed out')
|
|
+ finally:
|
|
+ if p.is_alive():
|
|
+ p.terminate()
|
|
+ p.join()
|
|
+
|
|
|
|
def get_debug_out(pat):
|
|
with captured_stdout() as out:
|
|
diff --git a/Misc/NEWS.d/next/Tests/2022-07-08-12-22-00.gh-issue-94675.IiTs5f.rst b/Misc/NEWS.d/next/Tests/2022-07-08-12-22-00.gh-issue-94675.IiTs5f.rst
|
|
new file mode 100644
|
|
index 0000000000..d0005d9f60
|
|
--- /dev/null
|
|
+++ b/Misc/NEWS.d/next/Tests/2022-07-08-12-22-00.gh-issue-94675.IiTs5f.rst
|
|
@@ -0,0 +1 @@
|
|
+Add a regression test for :mod:`re` exponentional slowdown when using rjsmin.
|