summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaehee Kim <zsaladinz@gmail.com>2024-11-12 12:01:56 (GMT)
committerGitHub <noreply@github.com>2024-11-12 12:01:56 (GMT)
commit0ef84b0e2bf511b2cb5268a9ce64d7f2209fb3c4 (patch)
tree1b1db67d34cdf081955734d872f5d4851ee4796c
parentf223efb2a2d6a3e86556be7295cbbd3ef839f489 (diff)
downloadcpython-0ef84b0e2bf511b2cb5268a9ce64d7f2209fb3c4.zip
cpython-0ef84b0e2bf511b2cb5268a9ce64d7f2209fb3c4.tar.gz
cpython-0ef84b0e2bf511b2cb5268a9ce64d7f2209fb3c4.tar.bz2
gh-126209: Fix inconsistency of `skip_file_prefixes` in `warnings.warn`'s C and Python implementations (GH-126329)
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
-rw-r--r--Lib/test/test_warnings/__init__.py12
-rw-r--r--Lib/test/test_warnings/data/stacklevel.py10
-rw-r--r--Misc/NEWS.d/next/Core_and_Builtins/2024-11-02-18-01-31.gh-issue-126209.2ZIhrS.rst3
-rw-r--r--Python/_warnings.c3
4 files changed, 23 insertions, 5 deletions
diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py
index 8b59630..4e3c877 100644
--- a/Lib/test/test_warnings/__init__.py
+++ b/Lib/test/test_warnings/__init__.py
@@ -533,6 +533,18 @@ class WarnTests(BaseTest):
warning_tests.package("prefix02", stacklevel=3)
self.assertIn("unittest", w[-1].filename)
+ def test_skip_file_prefixes_file_path(self):
+ # see: gh-126209
+ with warnings_state(self.module):
+ skipped = warning_tests.__file__
+ with original_warnings.catch_warnings(
+ record=True, module=self.module,
+ ) as w:
+ warning_tests.outer("msg", skip_file_prefixes=(skipped,))
+
+ self.assertEqual(len(w), 1)
+ self.assertNotEqual(w[-1].filename, skipped)
+
def test_skip_file_prefixes_type_errors(self):
with warnings_state(self.module):
warn = warning_tests.warnings.warn
diff --git a/Lib/test/test_warnings/data/stacklevel.py b/Lib/test/test_warnings/data/stacklevel.py
index c6dd247..fe36242 100644
--- a/Lib/test/test_warnings/data/stacklevel.py
+++ b/Lib/test/test_warnings/data/stacklevel.py
@@ -4,11 +4,13 @@
import warnings
from test.test_warnings.data import package_helper
-def outer(message, stacklevel=1):
- inner(message, stacklevel)
-def inner(message, stacklevel=1):
- warnings.warn(message, stacklevel=stacklevel)
+def outer(message, stacklevel=1, skip_file_prefixes=()):
+ inner(message, stacklevel, skip_file_prefixes)
+
+def inner(message, stacklevel=1, skip_file_prefixes=()):
+ warnings.warn(message, stacklevel=stacklevel,
+ skip_file_prefixes=skip_file_prefixes)
def package(message, *, stacklevel):
package_helper.inner_api(message, stacklevel=stacklevel,
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-11-02-18-01-31.gh-issue-126209.2ZIhrS.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-02-18-01-31.gh-issue-126209.2ZIhrS.rst
new file mode 100644
index 0000000..727f7f8
--- /dev/null
+++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-02-18-01-31.gh-issue-126209.2ZIhrS.rst
@@ -0,0 +1,3 @@
+Fix an issue with ``skip_file_prefixes`` parameter which resulted in an inconsistent
+behaviour between the C and Python implementations of :func:`warnings.warn`.
+Patch by Daehee Kim.
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 3f9e73b..e05ba99 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -803,7 +803,8 @@ is_filename_to_skip(PyObject *filename, PyTupleObject *skip_file_prefixes)
for (Py_ssize_t idx = 0; idx < prefixes; ++idx)
{
PyObject *prefix = PyTuple_GET_ITEM(skip_file_prefixes, idx);
- Py_ssize_t found = PyUnicode_Tailmatch(filename, prefix, 0, -1, -1);
+ Py_ssize_t found = PyUnicode_Tailmatch(filename, prefix,
+ 0, PY_SSIZE_T_MAX, -1);
if (found == 1) {
return true;
}