From 2e61f98dd41ce7328aebc27debd78845afdc0dba Mon Sep 17 00:00:00 2001
From: Mikael Pettersson <mikpelinux@gmail.com>
Date: Fri, 31 Jul 2015 21:15:13 +0200
Subject: erts: fix binary_to_integer boundary case

erlang:binary_to_integer/1 and /2 fail to detect invalid
input consisting of a single + or - sign but nothing else.
For an input like <<"+">> they return 0, while list_to_integer/1
correctly signals a badarg for "+".

Fixed by checking if the input is empty after the initial +/-
sign processing.

Added a test case which fails without this fix but passes with it.

Thanks to "niku" for reporting the issue.
---
 erts/emulator/test/num_bif_SUITE.erl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'erts/emulator/test')

diff --git a/erts/emulator/test/num_bif_SUITE.erl b/erts/emulator/test/num_bif_SUITE.erl
index f07f79b83d..90b6a36262 100644
--- a/erts/emulator/test/num_bif_SUITE.erl
+++ b/erts/emulator/test/num_bif_SUITE.erl
@@ -429,7 +429,7 @@ t_string_to_integer(Config) when is_list(Config) ->
 				       list_to_binary(Value))),
 			  {'EXIT', {badarg, _}} = 
 			      (catch erlang:list_to_integer(Value))
-		  end,["1.0"," 1"," -1",""]),
+		  end,["1.0"," 1"," -1","","+"]),
     
     % Custom base error cases
     lists:foreach(fun({Value,Base}) ->
-- 
cgit v1.2.3