<div dir="ltr">I would definitely add test cases for this to the test suite. It warrants one on the evil corner case numbers to make sure they are right in the future.</div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Wed, Aug 20, 2014 at 9:53 AM, Mikael Pettersson <span dir="ltr"><<a href="mailto:mikpelinux@gmail.com" target="_blank">mikpelinux@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Conversion of MIN_SMALL as a numeral to an Erlang integer, via<br>
binary_to_integer/1 or list_to_integer/1, succeeds but creates<br>
the integer as a negative bignum.  This is incorrect as (a) the<br>
value fits in a fixnum, and (b) the VM expects values that fit<br>
in fixnums to also be fixnums.  The bug is that the numeral is<br>
converted first as a non-negative number, and then finally<br>
negated if prefixed by a unary minus sign.  MIN_SMALL without<br>
the sign is MAX_SMALL+1, which doesn't fit in a fixnum, so the<br>
value before the negation is a bignum.  To correct the<br>
representation after the negation call big_plus_small with zero,<br>
as already done in other places.<br>
<br>
Tested with the emulator testsuite on Linux/x86_64, no regressions.<br>
<br>
Thanks to Jesper Louis Andersen for the report to erlang-bugs.<br>
<br>
Signed-off-by: Mikael Pettersson <<a href="mailto:mikpelinux@gmail.com">mikpelinux@gmail.com</a>><br>
<br>
Links:<br>
<br>
git fetch git://<a href="http://github.com/mikpe/otp.git" target="_blank">github.com/mikpe/otp.git</a> MIN_SMALL-to-integer<br>
<br>
<a href="https://github.com/mikpe/otp/compare/erlang:maint...MIN_SMALL-to-integer" target="_blank">https://github.com/mikpe/otp/compare/erlang:maint...MIN_SMALL-to-integer</a><br>
<a href="https://github.com/mikpe/otp/compare/erlang:maint...MIN_SMALL-to-integer.patch" target="_blank">https://github.com/mikpe/otp/compare/erlang:maint...MIN_SMALL-to-integer.patch</a><br>
<br>
<a href="https://github.com/erlang/otp/pull/452" target="_blank">https://github.com/erlang/otp/pull/452</a><br>
_______________________________________________<br>
erlang-patches mailing list<br>
<a href="mailto:erlang-patches@erlang.org">erlang-patches@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-patches" target="_blank">http://erlang.org/mailman/listinfo/erlang-patches</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>J.
</div>