Bug ... in Erlang

Raimo Niskanen raimo.niskanen@REDACTED
Wed Jun 18 14:19:00 CEST 2003

These bug will be fixed in R9C:

There was bug with list_to_float/1 returning weird floats on some 
Linuxes and on (all) Windowses.

1> erlang:display(list_to_float("1.0e309")). % Linux

1> erlang:display(list_to_float("1.0e309")). % Windows
2> list_to_float("1.0e309").

Here "inf" and "1.#INF000e+000" are infinity floats (that should not 
exist in Erlang). You can try to assign them to a variable and 
performing tests on them. For example list_to_float("1.0e309") > 1.0e308 
-> true. But printing with io:format/2 (as the shell does) crashes on 
Linux and prints 1.00000e+0 on Windows.

So, list_to_float/1 has been rewritten to use strtod() (previously 
atof() on Unixish systems and sscanf("%lf",..) on Windows) and check 
errors on all platforms. Hopefully no more malicious floats.

There was a problem when the shell crashed, which it seldom does. It did 
when printing infinity floats on Linux. You could type ^G to get to the 
job handler menu and there start a new shell, but not many knew that.

So, the shell handling has been rewritten to automatically start a new 
shell if it crashes.

For snapshot builders and for us internally there was a problem with the 
new erl_scan:

1> 1.0e309.
** 1: illegal float **
2> .
** 1: syntax error before: '.' **

The new scanner left unscanned data on the input stream after a scan 
error. Therefore the second '.' command.

So, the new erl_scan has been rewritten to always scan to full stop 
('.') while recording errors, and finally check if there were any.

Note that you can still do (as before):

1> a. b.
2> b.

/ Raimo Niskanen, Erlang/OTP, Ericsson AB

Joe Armstrong wrote:
>  Try typing the following:
> 	> 1.0e309.
>  Is this a bug?
>  /Joe

More information about the erlang-questions mailing list