Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/kimi_cli/auth/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ def get_device_id() -> str:
def _ascii_header_value(value: str, *, fallback: str = "unknown") -> str:
try:
value.encode("ascii")
return value
sanitized = value.strip()
except UnicodeEncodeError:
sanitized = value.encode("ascii", errors="ignore").decode("ascii").strip()
return sanitized or fallback
return sanitized or fallback


def _common_headers() -> dict[str, str]:
Expand Down
40 changes: 40 additions & 0 deletions tests/utils/test_ascii_header_value.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from __future__ import annotations

from kimi_cli.auth.oauth import _ascii_header_value


def test_strips_trailing_whitespace() -> None:
"""platform.version() on some Linux systems returns a trailing space."""
value = "#100~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 19 17:10:19 UTC "
assert _ascii_header_value(value) == value.strip()


def test_strips_leading_whitespace() -> None:
value = " some-value"
assert _ascii_header_value(value) == "some-value"


def test_clean_ascii_value_unchanged() -> None:
value = "KimiCLI/1.13.0"
assert _ascii_header_value(value) == value


def test_non_ascii_stripped_and_trimmed() -> None:
value = "héllo wörld "
result = _ascii_header_value(value)
assert result == "hllo wrld"


def test_empty_after_sanitize_returns_fallback() -> None:
value = "日本語"
assert _ascii_header_value(value) == "unknown"


def test_custom_fallback() -> None:
value = "日本語"
assert _ascii_header_value(value, fallback="n/a") == "n/a"


def test_whitespace_only_returns_fallback() -> None:
value = " "
assert _ascii_header_value(value) == "unknown"