LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File 0669-bs_construct_SUITE-Rename-bs_add_overflow-1-to-bs_ap.patch of Package erlang (Project home:Ledest:erlang:20)

From 17e40238791075449b25076ed17f97f3d101eaed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Wed, 10 Apr 2019 14:56:05 +0200
Subject: [PATCH 03/11] bs_construct_SUITE: Rename bs_add_overflow/1 to
 bs_append_overflow/1

The test case tests that the bs_append instruction tests for overflow.
Make that clear by renaming the test case.

While at it, also add a few explicit garbage_collection/0 calls to
make it more likeley to run successfully in tight memory situations.
---
 erts/emulator/test/bs_construct_SUITE.erl | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/erts/emulator/test/bs_construct_SUITE.erl b/erts/emulator/test/bs_construct_SUITE.erl
index cb83a33563..8fab4f5bc4 100644
--- a/erts/emulator/test/bs_construct_SUITE.erl
+++ b/erts/emulator/test/bs_construct_SUITE.erl
@@ -27,7 +27,7 @@
 	 mem_leak/1, coerce_to_float/1, bjorn/1, append_empty_is_same/1,
 	 huge_float_field/1, system_limit/1, badarg/1,
 	 copy_writable_binary/1, kostis/1, dynamic/1, bs_add/1,
-	 otp_7422/1, zero_width/1, bad_append/1, bs_add_overflow/1]).
+	 otp_7422/1, zero_width/1, bad_append/1, bs_append_overflow/1]).
 
 -include_lib("common_test/include/ct.hrl").
 
@@ -40,7 +40,7 @@ all() ->
      in_guard, mem_leak, coerce_to_float, bjorn, append_empty_is_same,
      huge_float_field, system_limit, badarg,
      copy_writable_binary, kostis, dynamic, bs_add, otp_7422, zero_width,
-     bad_append, bs_add_overflow].
+     bad_append, bs_append_overflow].
 
 init_per_suite(Config) ->
     Config.
@@ -852,33 +852,37 @@ append_unit_8(Bin) ->
 append_unit_16(Bin) ->
     <<Bin/binary-unit:16,0:1>>.
 
-%% Produce a large result of bs_add that, if cast to signed int, would overflow
-%% into a negative number that fits a smallnum.
-bs_add_overflow(_Config) ->
+%% Test that the bs_append instruction will correctly check for
+%% overflow by producing a binary whose total size would exceed the
+%% maximum allowed size for a binary on a 32-bit computer.
+
+bs_append_overflow(_Config) ->
     Memsize = memsize(),
     io:format("Memsize = ~w Bytes~n", [Memsize]),
     case erlang:system_info(wordsize) of
 	8 ->
+            %% Not possible to test on a 64-bit computer.
 	    {skip, "64-bit architecture"};
         _ when Memsize < (2 bsl 30) ->
-	    {skip, "Less then 2 GB of memory"};
+	    {skip, "Less than 2 GB of memory"};
 	4 ->
-            {'EXIT', {system_limit, _}} = (catch bs_add_overflow_signed()),
-            {'EXIT', {system_limit, _}} = (catch bs_add_overflow_unsigned()),
+            {'EXIT', {system_limit, _}} = (catch bs_append_overflow_signed()),
+            erlang:garbage_collect(),
+            {'EXIT', {system_limit, _}} = (catch bs_append_overflow_unsigned()),
+            erlang:garbage_collect(),
 	    ok
     end.
 
-bs_add_overflow_signed() ->
-    %% Produce a large result of bs_add that, if cast to signed int, would
+bs_append_overflow_signed() ->
+    %% Produce a large binary that, if cast to signed int, would
     %% overflow into a negative number that fits a smallnum.
     Large = <<0:((1 bsl 30)-1)>>,
     <<Large/bits, Large/bits, Large/bits, Large/bits,
       Large/bits, Large/bits, Large/bits, Large/bits,
       Large/bits>>.
 
-bs_add_overflow_unsigned() ->
-    %% Produce a large result of bs_add that goes beyond the limit of an
-    %% unsigned word. This used to succeed but produced an incorrect result
+bs_append_overflow_unsigned() ->
+    %% The following would succeed but would produce an incorrect result
     %% where B =:= C!
     A = <<0:((1 bsl 32)-8)>>,
     B = <<2, 3>>,
-- 
2.16.4