Skip to content

Commit 254db14

Browse files
Harden display helper max-length validation boundaries
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 585eada commit 254db14

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

hyperbrowser/display_utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
from hyperbrowser.type_utils import is_plain_string
1+
from hyperbrowser.type_utils import is_plain_int, is_plain_string
22

33
_TRUNCATED_DISPLAY_SUFFIX = "... (truncated)"
44
_DEFAULT_BLANK_KEY_FALLBACK = "<blank key>"
5+
_DEFAULT_MAX_DISPLAY_LENGTH = 200
56

67

78
def normalize_display_text(value: object, *, max_length: int) -> str:
89
if not is_plain_string(value):
910
return ""
11+
if not is_plain_int(max_length) or max_length <= 0:
12+
max_length = _DEFAULT_MAX_DISPLAY_LENGTH
1013
try:
1114
sanitized_value = "".join(
1215
"?" if ord(character) < 32 or ord(character) == 127 else character

tests/test_display_utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ class _StringSubclass(str):
3737
assert normalize_display_text(_StringSubclass("value"), max_length=20) == ""
3838

3939

40+
def test_normalize_display_text_uses_default_length_for_non_int_max_length():
41+
assert normalize_display_text("value", max_length="invalid") == "value" # type: ignore[arg-type]
42+
43+
44+
def test_normalize_display_text_uses_default_length_for_non_positive_max_length():
45+
assert normalize_display_text("value", max_length=0) == "value"
46+
assert normalize_display_text("value", max_length=-10) == "value"
47+
48+
4049
def test_format_string_key_for_error_returns_normalized_key():
4150
assert format_string_key_for_error(" \nkey\t ", max_length=20) == "?key?"
4251

0 commit comments

Comments
 (0)