From fd440738a6bbfb0bc53b7a32b700d37700fd1218 Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Mon, 4 Jun 2018 11:40:38 +0200
Subject: Fix *case bugs for binaries

Bad optimizing code introduced in 5c51e87bee9d
---
 lib/stdlib/src/string.erl        | 12 ++++++------
 lib/stdlib/test/string_SUITE.erl | 12 ++++++------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/lib/stdlib/src/string.erl b/lib/stdlib/src/string.erl
index f5d271c06d..cf48b882e4 100644
--- a/lib/stdlib/src/string.erl
+++ b/lib/stdlib/src/string.erl
@@ -691,9 +691,9 @@ uppercase_list(CPs0, Changed) ->
 uppercase_bin(CP1, <<CP2/utf8, Bin/binary>>, _Changed)
   when $a =< CP1, CP1 =< $z, CP2 < 256 ->
     [CP1-32|uppercase_bin(CP2, Bin, true)];
-uppercase_bin(CP1, <<CP2/utf8, Bin/binary>>, _Changed)
+uppercase_bin(CP1, <<CP2/utf8, Bin/binary>>, Changed)
   when CP1 < 128, CP2 < 256 ->
-    [CP1|uppercase_bin(CP2, Bin, false)];
+    [CP1|uppercase_bin(CP2, Bin, Changed)];
 uppercase_bin(CP1, Bin, Changed) ->
     case unicode_util:uppercase([CP1|Bin]) of
         [CP1|CPs] ->
@@ -732,9 +732,9 @@ lowercase_list(CPs0, Changed) ->
 lowercase_bin(CP1, <<CP2/utf8, Bin/binary>>, _Changed)
   when $A =< CP1, CP1 =< $Z, CP2 < 256 ->
     [CP1+32|lowercase_bin(CP2, Bin, true)];
-lowercase_bin(CP1, <<CP2/utf8, Bin/binary>>, _Changed)
+lowercase_bin(CP1, <<CP2/utf8, Bin/binary>>, Changed)
   when CP1 < 128, CP2 < 256 ->
-    [CP1|lowercase_bin(CP2, Bin, false)];
+    [CP1|lowercase_bin(CP2, Bin, Changed)];
 lowercase_bin(CP1, Bin, Changed) ->
     case unicode_util:lowercase([CP1|Bin]) of
         [CP1|CPs] ->
@@ -773,9 +773,9 @@ casefold_list(CPs0, Changed) ->
 casefold_bin(CP1, <<CP2/utf8, Bin/binary>>, _Changed)
   when $A =< CP1, CP1 =< $Z, CP2 < 256 ->
     [CP1+32|casefold_bin(CP2, Bin, true)];
-casefold_bin(CP1, <<CP2/utf8, Bin/binary>>, _Changed)
+casefold_bin(CP1, <<CP2/utf8, Bin/binary>>, Changed)
   when CP1 < 128, CP2 < 256 ->
-    [CP1|casefold_bin(CP2, Bin, false)];
+    [CP1|casefold_bin(CP2, Bin, Changed)];
 casefold_bin(CP1, Bin, Changed) ->
     case unicode_util:casefold([CP1|Bin]) of
         [CP1|CPs] ->
diff --git a/lib/stdlib/test/string_SUITE.erl b/lib/stdlib/test/string_SUITE.erl
index 29fabb4583..ab412dcc70 100644
--- a/lib/stdlib/test/string_SUITE.erl
+++ b/lib/stdlib/test/string_SUITE.erl
@@ -409,8 +409,8 @@ uppercase(_) ->
     ?TEST("abc", [], "ABC"),
     ?TEST("ABC", [], "ABC"),
     ?TEST("abcdefghiljklmnopqrstvxyzåäö",[], "ABCDEFGHILJKLMNOPQRSTVXYZÅÄÖ"),
-    ?TEST("åäö", [], "ÅÄÖ"),
-    ?TEST("ÅÄÖ", [], "ÅÄÖ"),
+    ?TEST("åäö  ", [], "ÅÄÖ  "),
+    ?TEST("ÅÄÖ  ", [], "ÅÄÖ  "),
     ?TEST("Michał", [], "MICHAŁ"),
     ?TEST(["Mic",<<"hał"/utf8>>], [], "MICHAŁ"),
     ?TEST("ljLJ", [], "LJLJ"),
@@ -423,8 +423,8 @@ lowercase(_) ->
     ?TEST("123", [], "123"),
     ?TEST("abc", [], "abc"),
     ?TEST("ABC", [], "abc"),
-    ?TEST("åäö", [], "åäö"),
-    ?TEST("ÅÄÖ", [], "åäö"),
+    ?TEST("åäö  ", [], "åäö  "),
+    ?TEST("ÅÄÖ  ", [], "åäö  "),
     ?TEST("MICHAŁ", [], "michał"),
     ?TEST(["Mic",<<"HAŁ"/utf8>>], [], "michał"),
     ?TEST("ß SHARP S", [], "ß sharp s"),
@@ -449,8 +449,8 @@ casefold(_) ->
     ?TEST("123", [], "123"),
     ?TEST("abc", [], "abc"),
     ?TEST("ABC", [], "abc"),
-    ?TEST("åäö", [], "åäö"),
-    ?TEST("ÅÄÖ", [], "åäö"),
+    ?TEST("åäö  ", [], "åäö  "),
+    ?TEST("ÅÄÖ  ", [], "åäö  "),
     ?TEST("MICHAŁ", [], "michał"),
     ?TEST(["Mic",<<"HAŁ"/utf8>>], [], "michał"),
     ?TEST("ß SHARP S", [], "ss sharp s"),
-- 
cgit v1.2.3