Skip to content

Commit 60ea32c

Browse files
committed
skip rendering missing source
1 parent c0e67e9 commit 60ea32c

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Unreleased
1010
:issue:`3065`
1111
- Improve CPU usage during Watchdog reloader. :issue:`3054`
1212
- `Request.json` annotation is more accurate. :issue:`3067`
13+
- Traceback rendering handles when thd line number is beyond the available
14+
source lines. :issue:`3044`
1315

1416

1517
Version 3.1.3

src/werkzeug/debug/tbtools.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ def render_line(line: str, cls: str) -> None:
420420
f"{arrow if arrow else ''}</pre>"
421421
)
422422

423-
if lines:
423+
if line_idx < len(lines):
424424
for line in lines[start_idx:line_idx]:
425425
render_line(line, "before")
426426

tests/test_debug.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import linecache
12
import re
23
import sys
4+
from unittest import mock
35

46
import pytest
57

@@ -290,3 +292,20 @@ def test_exception_without_traceback():
290292
# filter_hidden_frames should skip this since it has no traceback
291293
e.__context__ = Exception("msg2")
292294
DebugTraceback(e)
295+
296+
297+
@mock.patch.object(linecache, "getlines", autospec=True)
298+
def test_missing_source_lines(mock_getlines: mock.Mock) -> None:
299+
"""Rendering doesn't fail when the line number is beyond the available
300+
source lines.
301+
"""
302+
mock_getlines.return_value = ["truncated"]
303+
304+
try:
305+
raise ValueError()
306+
except ValueError as e:
307+
tb = DebugTraceback(e)
308+
309+
html = tb.render_traceback_html()
310+
assert "test_debug.py" in html
311+
assert "truncated" not in html

0 commit comments

Comments
 (0)