Skip to content

Commit 0ef84b0

Browse files
zsaladinterryjreedypicnixzEclips4
authored
gh-126209: Fix inconsistency of skip_file_prefixes in warnings.warn's C and Python implementations (GH-126329)
Co-authored-by: Terry Jan Reedy <[email protected]> Co-authored-by: Bénédikt Tran <[email protected]> Co-authored-by: Kirill Podoprigora <[email protected]>
1 parent f223efb commit 0ef84b0

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

Lib/test/test_warnings/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,18 @@ def test_skip_file_prefixes(self):
533533
warning_tests.package("prefix02", stacklevel=3)
534534
self.assertIn("unittest", w[-1].filename)
535535

536+
def test_skip_file_prefixes_file_path(self):
537+
# see: gh-126209
538+
with warnings_state(self.module):
539+
skipped = warning_tests.__file__
540+
with original_warnings.catch_warnings(
541+
record=True, module=self.module,
542+
) as w:
543+
warning_tests.outer("msg", skip_file_prefixes=(skipped,))
544+
545+
self.assertEqual(len(w), 1)
546+
self.assertNotEqual(w[-1].filename, skipped)
547+
536548
def test_skip_file_prefixes_type_errors(self):
537549
with warnings_state(self.module):
538550
warn = warning_tests.warnings.warn

Lib/test/test_warnings/data/stacklevel.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import warnings
55
from test.test_warnings.data import package_helper
66

7-
def outer(message, stacklevel=1):
8-
inner(message, stacklevel)
97

10-
def inner(message, stacklevel=1):
11-
warnings.warn(message, stacklevel=stacklevel)
8+
def outer(message, stacklevel=1, skip_file_prefixes=()):
9+
inner(message, stacklevel, skip_file_prefixes)
10+
11+
def inner(message, stacklevel=1, skip_file_prefixes=()):
12+
warnings.warn(message, stacklevel=stacklevel,
13+
skip_file_prefixes=skip_file_prefixes)
1214

1315
def package(message, *, stacklevel):
1416
package_helper.inner_api(message, stacklevel=stacklevel,
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix an issue with ``skip_file_prefixes`` parameter which resulted in an inconsistent
2+
behaviour between the C and Python implementations of :func:`warnings.warn`.
3+
Patch by Daehee Kim.

Python/_warnings.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,8 @@ is_filename_to_skip(PyObject *filename, PyTupleObject *skip_file_prefixes)
803803
for (Py_ssize_t idx = 0; idx < prefixes; ++idx)
804804
{
805805
PyObject *prefix = PyTuple_GET_ITEM(skip_file_prefixes, idx);
806-
Py_ssize_t found = PyUnicode_Tailmatch(filename, prefix, 0, -1, -1);
806+
Py_ssize_t found = PyUnicode_Tailmatch(filename, prefix,
807+
0, PY_SSIZE_T_MAX, -1);
807808
if (found == 1) {
808809
return true;
809810
}

0 commit comments

Comments
 (0)