diff options
author | Björn Gustavsson <[email protected]> | 2010-12-14 15:08:49 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-12-21 11:30:45 +0100 |
commit | b36c9d12d7960c06872d866c25a913eb45b957bc (patch) | |
tree | e659c3058ff5b5d1b0078df2b1d3cd1a1964a49e /lib | |
parent | 9f4dd4934d427f0fb2caeb034115e0227cc4610a (diff) | |
download | otp-b36c9d12d7960c06872d866c25a913eb45b957bc.tar.gz otp-b36c9d12d7960c06872d866c25a913eb45b957bc.tar.bz2 otp-b36c9d12d7960c06872d866c25a913eb45b957bc.zip |
Fix type-checking of variable used in zero-width bit syntax construction
<<A:0>> will always produce an empty binary, regardless of the
type of A. The bug is in the run-time system. Fix it so that a
non-numeric value for A will cause a badarg exception.
Reported-by: Zvi
Diffstat (limited to 'lib')
-rw-r--r-- | lib/stdlib/test/erl_eval_SUITE.erl | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl index c60a558fa1..254ce0095d 100644 --- a/lib/stdlib/test/erl_eval_SUITE.erl +++ b/lib/stdlib/test/erl_eval_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1998-2009. All Rights Reserved. +%% Copyright Ericsson AB 1998-2010. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -38,7 +38,8 @@ otp_8133/1, funs/1, try_catch/1, - eval_expr_5/1]). + eval_expr_5/1, + zero_width/1]). %% %% Define to run outside of test server @@ -76,7 +77,8 @@ all(suite) -> [guard_1, guard_2, match_pattern, string_plusplus, pattern_expr, match_bin, guard_3, guard_4, lc, simple_cases, unary_plus, apply_atom, otp_5269, otp_6539, otp_6543, - otp_6787, otp_6977, otp_7550, otp_8133, funs, try_catch, eval_expr_5]. + otp_6787, otp_6977, otp_7550, otp_8133, funs, try_catch, eval_expr_5, + zero_width]. guard_1(doc) -> ["(OTP-2405)"]; @@ -1326,6 +1328,14 @@ eval_expr_5(Config) when is_list(Config) -> ok end. +zero_width(Config) when is_list(Config) -> + ?line check(fun() -> + {'EXIT',{badarg,_}} = (catch <<not_a_number:0>>), + ok + end, "begin {'EXIT',{badarg,_}} = (catch <<not_a_number:0>>), " + "ok end.", ok), + ok. + %% Check the string in different contexts: as is; in fun; from compiled code. check(F, String, Result) -> check1(F, String, Result), |