Skip to content

Commit ec36035

Browse files
committed
Fix Logger.Utils.truncate_n UTF-8 range for two-byte code points
Two-byte UTF-8 sequences start at U+0080 (128), not U+007F (127). The previous guard `127..0x07FF` overlapped the single-byte clause and could misclassify U+007F if clause order changed. Add regression tests for U+007F/U+0080 byte boundaries.
1 parent cdbf9b7 commit ec36035

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

lib/logger/lib/logger/utils.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ defmodule Logger.Utils do
228228
end
229229

230230
def truncate_n(int, n) when int in 0..127, do: {int, n - 1}
231-
def truncate_n(int, n) when int in 127..0x07FF, do: {int, n - 2}
231+
def truncate_n(int, n) when int in 128..0x07FF, do: {int, n - 2}
232232
def truncate_n(int, n) when int in 0x800..0xFFFF, do: {int, n - 3}
233233
def truncate_n(int, n) when int >= 0x10000 and is_integer(int), do: {int, n - 4}
234234

lib/logger/test/logger/utils_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,12 @@ defmodule Logger.UtilsTest do
6767
long_string = String.duplicate("foo", 10_000)
6868
assert scan_inspect(~c"~ts", [long_string], :infinity) == {~c"~ts", [long_string]}
6969
end
70+
71+
test "truncate_n integer code points use UTF-8 byte length (U+007F 1 byte, U+0080 2 bytes)" do
72+
assert Logger.Utils.truncate_n(0x7F, 1) == {0x7F, 0}
73+
assert Logger.Utils.truncate_n(0x7F, 2) == {0x7F, 1}
74+
assert Logger.Utils.truncate_n(0x80, 1) == {0x80, -1}
75+
assert Logger.Utils.truncate_n(0x80, 2) == {0x80, 0}
76+
assert Logger.Utils.truncate_n([0x7F, 0x80], 3) == {[0x7F, 0x80], 0}
77+
end
7078
end

0 commit comments

Comments
 (0)