Skip to content

Commit 7bdc674

Browse files
committed
Eliminate crash in matching of utf32 segment
1 parent 5400ccf commit 7bdc674

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
@@ -951,6 +951,10 @@ bs_skip_utf16 Fail=f Ms=xy u Flags=u => skip_utf16(Fail, Ms, Flags)
951951
i_bs_get_utf16 S f t d
952952
i_bs_skip_utf16 S f t
953953

954+
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst | equal(Ms, Dst) =>
955+
bs_get_integer2 Fail Ms Live i=32 u=1 Flags x |
956+
i_bs_validate_unicode_retract Fail x Ms |
957+
move x Dst
954958
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst=d =>
955959
bs_get_integer2 Fail Ms Live i=32 u=1 Flags Dst |
956960
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
@@ -923,6 +923,11 @@ bs_skip_utf16 Fail=f Ms=xy u Flags=u => skip_utf16(Fail, Ms, Flags)
923923
i_bs_get_utf16 S f t d
924924
i_bs_skip_utf16 S f t
925925

926+
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst | equal(Ms, Dst) =>
927+
bs_get_integer2 Fail Ms Live i=32 u=1 Flags x |
928+
i_bs_validate_unicode_retract Fail x Ms |
929+
move x Dst
930+
926931
bs_get_utf32 Fail=f Ms=xy Live=u Flags=u Dst=d =>
927932
bs_get_integer2 Fail Ms Live i=32 u=1 Flags Dst |
928933
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)