File 0301-core_parse-Fix-handling-of-negative-sizes-in-binarie.patch of Package erlang

From 4332bcdc9f6dd1b4c390a50df07b7e8ebf536f88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Mon, 19 Mar 2018 14:40:32 +0100
Subject: [PATCH 1/2] core_parse: Fix handling of negative sizes in binaries

A literal negative size in binary construction would cause a crash.
---
 lib/compiler/src/core_parse.yrl          | 2 +-
 lib/compiler/test/bs_construct_SUITE.erl | 9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/compiler/src/core_parse.yrl b/lib/compiler/src/core_parse.yrl
index 79a7cccd98..85444023c6 100644
--- a/lib/compiler/src/core_parse.yrl
+++ b/lib/compiler/src/core_parse.yrl
@@ -496,7 +496,7 @@ make_lit_bin(Acc, [#c_bitstr{val=I0,size=Sz0,unit=U0,type=Type0,flags=F0}|T]) ->
 	    throw(impossible)
     end,
     if
-	Sz =< 8, T =:= [] ->
+	0 =< Sz, Sz =< 8, T =:= [] ->
 	    <<Acc/binary,I:Sz>>;
 	Sz =:= 8 ->
 	    make_lit_bin(<<Acc/binary,I:8>>, T);
diff --git a/lib/compiler/test/bs_construct_SUITE.erl b/lib/compiler/test/bs_construct_SUITE.erl
index da99aba346..7c5ad97f7e 100644
--- a/lib/compiler/test/bs_construct_SUITE.erl
+++ b/lib/compiler/test/bs_construct_SUITE.erl
@@ -303,7 +303,14 @@ fail(Config) when is_list(Config) ->
     {'EXIT',{badarg,_}} = (catch <<42.0/integer>>),
     {'EXIT',{badarg,_}} = (catch <<42/binary>>),
     {'EXIT',{badarg,_}} = (catch <<an_atom/integer>>),
-    
+
+    %% Bad literal sizes
+    Bin = i(<<>>),
+    {'EXIT',{badarg,_}} = (catch <<0:(-1)>>),
+    {'EXIT',{badarg,_}} = (catch <<Bin/binary,0:(-1)>>),
+    {'EXIT',{badarg,_}} = (catch <<0:(-(1 bsl 100))>>),
+    {'EXIT',{badarg,_}} = (catch <<Bin/binary,0:(-(1 bsl 100))>>),
+
     ok.
 
 float_bin(Config) when is_list(Config) ->
-- 
2.16.3

openSUSE Build Service is sponsored by