Skip to content

Commit e2c76a5

Browse files
author
Erlang/OTP
committed
Merge branch 'bjorn/erts/utf32/25/OTP-18560' into maint-25
* bjorn/erts/utf32/25/OTP-18560: Eliminate crash in matching of utf32 segment
2 parents e7a74b3 + 7bdc674 commit e2c76a5

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

erts/emulator/beam/emu/ops.tab

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,6 +1233,11 @@ bs_skip_utf16 Fail=f Ms=xy Unit=u Flags=u => bs_get_utf16 Fail Ms Unit Flags x
12331233

12341234
i_bs_get_utf16 xy f? t d
12351235

1236+
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst | equal(Ms, Dst) =>
1237+
bs_get_integer2 Fail Ms Live i=32 u=1 Flags x |
1238+
i_bs_validate_unicode_retract Fail x Ms |
1239+
move x Dst
1240+
12361241
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst=d =>
12371242
bs_get_integer2 Fail Ms Live i=32 u=1 Flags Dst |
12381243
i_bs_validate_unicode_retract Fail Dst Ms

erts/emulator/beam/jit/arm/ops.tab

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,10 @@ bs_skip_utf16 Fail=f Ms=xy u Flags=u => skip_utf16(Fail, Ms, Flags)
947947
i_bs_get_utf16 S f t d
948948
i_bs_skip_utf16 S f t
949949

950+
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst | equal(Ms, Dst) =>
951+
bs_get_integer2 Fail Ms Live i=32 u=1 Flags x |
952+
i_bs_validate_unicode_retract Fail x Ms |
953+
move x Dst
950954
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst=d =>
951955
bs_get_integer2 Fail Ms Live i=32 u=1 Flags Dst |
952956
i_bs_validate_unicode_retract Fail Dst Ms

erts/emulator/beam/jit/x86/ops.tab

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,11 @@ bs_skip_utf16 Fail=f Ms=xy u Flags=u => skip_utf16(Fail, Ms, Flags)
919919
i_bs_get_utf16 S f t d
920920
i_bs_skip_utf16 S f t
921921

922+
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst | equal(Ms, Dst) =>
923+
bs_get_integer2 Fail Ms Live i=32 u=1 Flags x |
924+
i_bs_validate_unicode_retract Fail x Ms |
925+
move x Dst
926+
922927
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst=d =>
923928
bs_get_integer2 Fail Ms Live i=32 u=1 Flags Dst |
924929
i_bs_validate_unicode_retract Fail Dst Ms

erts/emulator/test/bs_utf_SUITE.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,10 @@ utf32_illegal_sequences(Config) when is_list(Config) ->
272272
utf32_fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
273273
utf32_fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
274274
utf32_fail_range(-100, -1),
275+
276+
<<>> = id(<< 0 || <<X/utf32>> <= <<"àxxx">>, _ = X >>),
277+
<<>> = id(<< 0 || <<X/little-utf32>> <= <<"àxxx">>, _ = X >>),
278+
275279
ok.
276280

277281
utf32_fail_range(Char, End) when Char =< End ->

0 commit comments

Comments
 (0)