Age | Commit message (Collapse) | Author |
|
Fix rounding bug in float_to_list/2
|
|
* fhunleth/binary_to_integer_chec/PR-1671/OTP-14879:
Fail if ':' is passed to binary_to_integer/2
|
|
* hasse/stdlib/unicode_stacktrace/OTP-14847/ERL-553:
stdlib: Handle Unicode when formatting stacktraces
|
|
|
|
Replace long long with Uint64
|
|
Example symptom:
1> float_to_list(0.145, [{decimals,1}]).
"0.2"
There were two problems in sys_double_to_chars_fast
1. Most serious was adding 0.55555555 / (10^D) instead of 0.5 / (10^D)
which imposed a 5.5% risk of a faulty rounding up.
2. Using fixpoint for frac_part which lost significant bits if F < 0.5
|
|
See also ERL-553 and ERL-544 (commit c3ddb0f).
|
|
* rickard/file-encoding-stacktraces/OTP-14847/ERL-544:
Fix encoding of filenames in stacktraces
|
|
|
|
|
|
into utility functions.
|
|
Before:
1> binary_to_integer(<<":">>, 16).
3
After:
1> binary_to_integer(<<":">>, 16).
** exception error: bad argument
in function binary_to_integer/2
called as binary_to_integer(<<":">>,16)
Prior to this change, both list_to_integer/2 and binary_to_integer/2
would convert strings with values between ASCII '9' up to '0'+base for
base > 10. For example, when converting in base 16, you could pass ':',
';', '<', '=', '>', and '?' without getting an exception. This was due
to a missing check in c2int_is_invalid_char().
This change adds the missing check and a regression test for passing
':'. It also simplifies the code and tightens up an out-of-bounds check
to make it off-by-one rather than off-by-two.
|
|
Fix GC bug for HiPE primop bs_put_utf8
|
|
in order to detect incompatible changes in primop interface
(which we just did for bs_put_utf8) and refuse hipe loading.
|
|
by preventing it from doing GC, which generated code relies on.
|
|
|
|
Symptom: "Closing pipe in state Waiting. Event lost?"
Snake oil:
Do erlang:yield() instead of busy spinning in "Waiting" state.
|
|
|
|
|
|
fix output formatting in several HiPE debug BIFs
OTP-14804
|
|
Fix integer overflow when set a large maximum value for atom table
OTP-14796
|
|
|
|
When compiling Erlang source code, the literal area for the
module can only contain data types that have a literal
syntax.
However, it is possible to sneak in other data types
(such as references) in the literal pool by compiling from
abstract or assembly code. Those "fake literals" would work
fine, but would crash the runtime system when the module containing
the literals was purged.
Although fake literals are not officially supported, the
runtime should not crash when attempting to use them.
Therefore, fix the garbage collection of literals and releasing
of literal areas.
https://bugs.erlang.org/browse/ERL-508
|
|
* bjorn/base64-in-dumps/OTP-14686:
Use base64 encoding in crash dumps
Correct parsing of sub binaries
Generalize passing of options for decoding
|
|
|
|
This will reduce the size of crash dumps, especially if
there are large binaries.
|
|
MAX_ATOM_TABLE_SIZE
Currently, the max atom size on 64-bits Erlang is
((UWORD_CONSTANT(1) << 32) = 4294967296
This number will cause the range of atom size to be displayed as
[8192-0].
Also, the +t option for max atom size will be parsed as a long type, and
assigned to a int variable erts_atom_table_size (erl_init.c),
which will cause integer overflow if the number is larger than the
maximum value a 4-bytes signed integer can hold
((1 << 31) - 1) = 2147483647
Therefore, during the comparison
erts_atom_table_size < MIN_ATOM_TABLE_SIZE
any number above 2147483647 will be come negative, and causing
the condition to be true, which then errored out as bad atom table size.
Hence, the actual max atom size is same as the max signed int value.
|
|
When setting maximum atom table size using +t option, there will be a
integer overflow for a large size.
$ erl +t2147482625
ll_alloc: Cannot allocate 18446744073692774400 bytes of memory
(of type "atom_tab").
The overflow is caused by the arithmetic operations on int type.
When 2147482625 + 1024 it will become -2147483647 due to the signed
integerger overflow. Then the result will be resized to Uint type, which
is a unsigned long type, the negative int will first be expand to 64
bits long via sign extension, then change to unsigned type, which
becomes 18446744073692774400.
The fix is done by convert `limit` to Uint type before doing any
arithmetic operation. This will expand variable to 64 bits long type via
zero extension, then the following operation are all positive, therefore
no overflow will happen.
Note: here we assume the int `limit` passed in is always positive. If
some future change cause the `limit` passed in maybe negative, then the
current fix will also cause overflow.
|
|
* maint-20:
Updated OTP version
Prepare release
ssh: testcases for space trailing Hello msg
ssh: Don't remove trailing WS in Hello msg
ssh: dialyzer fixes
ssh: Fix broken error handling during session setup
Remove invalid EINTR loop around close(2)
Conflicts:
lib/ssh/test/ssh_options_SUITE.erl
|
|
* rickard/node-mon-proc-exit-race/maint-20/OTP-14781:
Fix triggering of node monitors
|
|
* john/erts/fix-close-eintr/OTP-14775:
Remove invalid EINTR loop around close(2)
|
|
|
|
* rickard/node-mon-proc-exit-race/OTP-14781:
Fix triggering of node monitors
|
|
|
|
|
|
|
|
when done by enif_free_env or enif_clear_env.
Do check before we free heap fragments.
|
|
Retrying close(2) on anything other than HP-UX is likely to close
something entirely different. POSIX says that the state of the file
descriptor is unspecified, and Linux/BSD guarantee that it's closed
on return.
|
|
Fix formatting in hipe_bifs:show_pcb/1, hipe_bifs:show_estack/1,
and hipe_bifs:show_nstack/1.
fflush(stdout) before switching from printf() to erts_printf() to
avoid garbled output.
Adjust field lengths to work on both 64- and 32-bit systems.
Tested on Linux/x86_64 (64-bit) and Linux/ARMv7 (32-bit).
|
|
* maint-20:
Updated OTP version
Update release notes
Update version numbers
inets: Prepare for release
inets: Add missing guard
Avoid WindowBits=8 as per the manual
Fix deflateParams on zlib 1.2.11
Ignore empty binaries in enif_inspect_iovec
Emasculate writable binaries on entering an iovec
Only apply EOS behaviors if there's pending data
Stop assuming that all schedulers are managed when updating msacc
|
|
Symptom: random rpc net_adm:ping returned pang
Use monitor_node to wait for failed connection
before we try to connect again.
|
|
for "+hmqd off_heap"
|
|
* john/erts/fix-gunzip-eos/OTP-14730/ERL-507:
Only apply EOS behaviors if there's pending data
|
|
* john/erts/msacc-dirty-schedulers/OTP-14707:
Stop assuming that all schedulers are managed when updating msacc
|
|
* john/erts/misc-iovec-issues/OTP-14745/OTP-14750:
Ignore empty binaries in enif_inspect_iovec
Emasculate writable binaries on entering an iovec
|
|
1.2.11 started bailing when avail_out==0 regardless of whether
there's anything to flush or not, and there's no point in adapting
the old method since it was vulnerable to bugs in other zlib
versions which updated the deflate parameters even on failure.
The api_deflateParams test has been expanded accordingly, and two
white-box cases in zip_usage has been updated to make fewer
assumptions about the output; the validity of the compressed data
is what matters, not whether it's exactly the same as the test
vector.
|
|
* sverker/systask-reqid-bug:
erts: Fix bug in systask scheduling
|
|
|
|
The lack of this caused serious data corruption when a binary was
altered after entering the queue. This went unnoticed because it
was never used without erlang:iolist_to_iovec, which always
emasculates binaries.
|
|
when request id is an immediate.
Ex:
erlang:garbage_collect(P, [{async,Immediate}]).
may crash the VM.
|