Erlang/OTP 20.3

This release of Erlang/OTP can be built from source or installed using pre-built packages for your OS or third-party tools (such as kerl or asdf).

docker run -it erlang:20.3

Highlights #

OTP-14760
Application(s):
ssl

Added new API functions to facilitate cipher suite handling

Potential Incompatibilities #

OTP-14850
Application(s):
erts, hipe
Related Id(s):
PR-1664

Fix HiPE bug for binary constructs like <<X/utf8>> which could in rare cases cause faulty results or VM crash.

This fix affects both the hipe compiler and erts runtime in an *incompatible* way. Old hipe compiled files need to be recompiled to load and run properly as native.

asn1-5.0.5 #

The asn1-5.0.5 application can be applied independently of other applications on a full OTP 20 installation.

OTP-13882
Application(s):
asn1
Related Id(s):
ERIERL-144

Dialyzer suppression has been added for the generated ASN.1 helper function to_bitstring/1 that previously created irrelevant warnings.

Full runtime dependencies of asn1-5.0.5: erts-7.0, kernel-3.0, stdlib-2.0

common_test-1.15.4 #

The common_test-1.15.4 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14953
Application(s):
common_test

Fixed problem with 'skip_groups' in combination with 'all suites' option in test specification.

Full runtime dependencies of common_test-1.15.4: compiler-6.0, crypto-3.6, debugger-4.1, erts-7.0, inets-6.0, kernel-4.0, observer-2.1, runtime_tools-1.8.16, sasl-2.4.2, snmp-5.1.2, ssh-4.0, stdlib-3.4, syntax_tools-1.7, tools-2.8, xmerl-1.3.8

compiler-7.1.5 #

The compiler-7.1.5 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14863
Application(s):
compiler

The internal compiler pass (beam_validator) that validates the generated code has been strengthened.

When compiling from BEAM assembly code, the beam_type optimizer pass could make the code unsafe. Corrected.

OTP-14898
Application(s):
compiler

Corrected optimizations of integers matched out from binaries and used in bit operations.

Full runtime dependencies of compiler-7.1.5: crypto-3.6, erts-9.0, hipe-3.12, kernel-4.0, stdlib-2.5

crypto-4.2.1 #

The crypto-4.2.1 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14873
Application(s):
crypto

Fix build error caused by removed RSA padding functions in LibreSSL >= 2.6.1

Full runtime dependencies of crypto-4.2.1: erts-9.0, kernel-5.3, stdlib-3.4

dialyzer-3.2.4 #

Note! The dialyzer-3.2.4 application can *not* be applied independently of other applications on an arbitrary OTP 20 installation. On a full OTP 20 installation, also the following runtime dependency has to be satisfied: -- hipe-3.16.1 (first satisfied in OTP 20.1)

OTP-14858
Application(s):
dialyzer
Related Id(s):
ERL-551

Fix bugs concerning erlang:abs/1 and erlang:bsl/2.

OTP-14911
Application(s):
dialyzer

Fix a bug that caused Dialyzer to crash instead of emitting a warning.

OTP-14925
Application(s):
dialyzer
Related Id(s):
ERL-565

Fix a bug concerning parameterized opaque types.

Full runtime dependencies of dialyzer-3.2.4: compiler-7.0, erts-9.0, hipe-3.16.1, kernel-5.3, stdlib-3.4, syntax_tools-2.0, wx-1.2

diameter-2.1.4 #

The diameter-2.1.4 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14839
Application(s):
diameter

Fix close of diameter_tcp/sctp listening socket at diameter:remove_transport/2, that was broken in diameter 2.1. A reconfigured transport could not listen on the same endpoint as a result.

OTP-14947
Application(s):
diameter
Related Id(s):
ERIERL-124

Fix handling of SUSPECT connections at service termination. A connection with this watchdog state caused diameter_service:terminate/2 to fail.

Full runtime dependencies of diameter-2.1.4: erts-6.4, kernel-3.2, ssl-6.0, stdlib-2.4

erts-9.3 #

The erts-9.3 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14840
Application(s):
erts, otp
Related Id(s):
ERL-529

Fixed a configure test for libz internals that unintentionally caused various native code in OTP to link against libz. Under certain circumstances this caused the build of OTP to fail.

OTP-14847
Application(s):
erts
Related Id(s):
ERL-544

File names containing unicode codepoints larger than 255 were not correctly encoded in stack traces.

OTP-14850
Application(s):
erts, hipe
Related Id(s):
PR-1664

*** POTENTIAL INCOMPATIBILITY ***

Fix HiPE bug for binary constructs like <<X/utf8>> which could in rare cases cause faulty results or VM crash.

This fix affects both the hipe compiler and erts runtime in an *incompatible* way. Old hipe compiled files need to be recompiled to load and run properly as native.

OTP-14876
Application(s):
erts
Related Id(s):
ERL-548

Fix term_to_binary/2 spec for minor_version.

OTP-14879
Application(s):
erts

Fix bug in erlang:binary_to_integer/2 where invalid characters were not detected for bases larger then 10. e.g. binary_to_integer(<<":">>, 16) would return 3 and not badarg as it should.

OTP-14890
Application(s):
erts

Fixed bug in float_to_list/2 and float_to_binary/2 with option decimals that caused a faulty rounding up of the last decimal digit for about 6% of floats with a fraction part.

For example, float_to_list(0.145, [{decimals,1}]) returned "0.2" instead of "0.1".

OTP-14891
Application(s):
erts

Fix bug causing slow hipe execution in modules loaded early during boot or loaded by code:atomic_load or code:finish_loading.

OTP-14920
Application(s):
erts

Fixed a buffer overflow in an internal string formatting function that could be hit if specifying a long floating-point format specifier to erts_sprintf or similar.

OTP-14921
Application(s):
erts

erlang:iolist_to_iovec/1 and enif_inspect_iovec will no longer fail when provided with binaries that have been matched-out on a non-byte boundary.

OTP-14926
Application(s):
erts

iolist_to_binary/1 and erlang:iolist_to_iovec/1 will now badarg if supplied with a bitstring (without a list).

OTP-14933
Application(s):
erts, kernel
Related Id(s):
ERL-564 , PR-1716

Reject loading modules with names containing directory separators ('/' or '\' on Windows).

OTP-14938
Application(s):
erts

Fix potential dead-lock when the tracer process dies while a the traced process is running on a dirty scheduler.

OTP-14820
Application(s):
erts, observer

More crash dump info such as: process binary virtual heap stats, full info for process causing out-of-mem during GC, more port related info, and dirty scheduler info.

Full runtime dependencies of erts-9.3: kernel-5.0, sasl-3.0.1, stdlib-3.0

hipe-3.17.1 #

Note! The hipe-3.17.1 application can *not* be applied independently of other applications on an arbitrary OTP 20 installation. On a full OTP 20 installation, also the following runtime dependency has to be satisfied: -- erts-9.3 (first satisfied in OTP 20.3)

OTP-14850
Application(s):
erts, hipe
Related Id(s):
PR-1664

*** POTENTIAL INCOMPATIBILITY ***

Fix HiPE bug for binary constructs like <<X/utf8>> which could in rare cases cause faulty results or VM crash.

This fix affects both the hipe compiler and erts runtime in an *incompatible* way. Old hipe compiled files need to be recompiled to load and run properly as native.

OTP-14886
Application(s):
hipe

The BEAM compiler chooses not to perform tailcall optimisations for some calls in tail position, for example to some built-in functions. However, when the ErLLVM HiPE backend is used, LLVM may choose to perform tailcall optimisation on these calls, breaking the expected semantics.

To preserve the precise semantics exhibited by BEAM, the 'notail' marker, present in LLVM since version 3.8, is added to call instructions that BEAM has not turned into tail calls, which inhibits LLVM from performing tail-call optimisation in turn.

Full runtime dependencies of hipe-3.17.1: compiler-5.0, erts-9.3, kernel-5.3, stdlib-3.4, syntax_tools-1.6.14

inets-6.5 #

The inets-6.5 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14908
Application(s):
inets

httpc_manager crashes when a long running request is sent on a persistent HTTP connection (keep-alive). Fixed httpc_manager to use proper timeouts on keep-alive connections.

OTP-14854
Application(s):
inets

Add support for unix domain sockets in the http client.

Full runtime dependencies of inets-6.5: erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, ssl-5.3.4, stdlib-2.0

kernel-5.4.3 #

Note! The kernel-5.4.3 application can *not* be applied independently of other applications on an arbitrary OTP 20 installation. On a full OTP 20 installation, also the following runtime dependency has to be satisfied: -- erts-9.3 (first satisfied in OTP 20.3)

OTP-14889
Application(s):
kernel, stdlib

Correct a few contracts.

OTP-14933
Application(s):
erts, kernel
Related Id(s):
ERL-564 , PR-1716

Reject loading modules with names containing directory separators ('/' or '\' on Windows).

OTP-14940
Application(s):
kernel

Fix bug in handling of os:cmd/2 option max_size on windows.

Full runtime dependencies of kernel-5.4.3: erts-9.3, sasl-3.0, stdlib-3.4

observer-2.7 #

The observer-2.7 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14842
Application(s):
observer
Related Id(s):
ERL-534

etop.hrl used a relative path to include observer_backend.hrl, this is now changed to use include_lib instead. runtime_tools/include is added to the tertiary bootstrap.

OTP-14846
Application(s):
observer
Related Id(s):
ERL-537

If a crashdump was truncated in the attributes section for a module, crashdump_viewer would crash when a module view was opened from the GUI. This bug was introduced in OTP-20.2 and is now corrected.

OTP-14856
Application(s):
observer
Related Id(s):
ERIERL-117

Optimized ets and mnesia table view tab in observer gui, listing 10000 tables was previously very slow.

OTP-14725
Application(s):
observer

When a process has many links and/or monitors, it could earlier take very long time to display the process information window. This is now improved by only showing a few links and monitors, and then an link named "more..." to expand the rest.

OTP-14820
Application(s):
erts, observer

More crash dump info such as: process binary virtual heap stats, full info for process causing out-of-mem during GC, more port related info, and dirty scheduler info.

Full runtime dependencies of observer-2.7: erts-7.0, et-1.5, inets-5.10, kernel-3.0, runtime_tools-1.8.14, stdlib-3.4, wx-1.2

runtime_tools-1.12.5 #

The runtime_tools-1.12.5 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14816
Application(s):
runtime_tools

system_information:to_file/1 will now use slightly less memory.

Full runtime dependencies of runtime_tools-1.12.5: erts-8.0, kernel-5.0, mnesia-4.12, stdlib-3.0

snmp-5.2.10 #

The snmp-5.2.10 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14204
Application(s):
snmp
Related Id(s):
PR-1726

The example MIB EX1-MIB in the SNMP application has been corrected to match its example.

Full runtime dependencies of snmp-5.2.10: crypto-3.3, erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, stdlib-2.5

ssh-4.6.6 #

Note! The ssh-4.6.6 application can *not* be applied independently of other applications on an arbitrary OTP 20 installation. On a full OTP 20 installation, also the following runtime dependencies have to be satisfied: -- crypto-4.2 (first satisfied in OTP 20.2) -- public_key-1.5.2 (first satisfied in OTP 20.2)

OTP-14939
Application(s):
ssh

Remove a blocking risk when a channel is closed and an operation is tried on that channel after at least a second's time gap.

OTP-14194
Application(s):
ssh
Related Id(s):
OTP-12487

Added ssh_compat_SUITE.

This suite contains a number of interoperability tests mainly with OpenSSH. The tests start docker containers with different OpenSSH and OpenSSL/LibreSSLcryptolib versions and performs a number of tests of supported algorithms.

All login methods and all user's public key types are tested both for the client and the server.

All algorithms for kex, cipher, host key, mac and compressions are tested with a number of exec and sftp tests, both for the client and the server.

OTP-14881
Application(s):
ssh

Default exec is disabled when a user-defined shell is enabled.

Full runtime dependencies of ssh-4.6.6: crypto-4.2, erts-6.0, kernel-3.0, public_key-1.5.2, stdlib-3.3

ssl-8.2.4 #

Note! The ssl-8.2.4 application can *not* be applied independently of other applications on an arbitrary OTP 20 installation. On a full OTP 20 installation, also the following runtime dependencies have to be satisfied: -- crypto-4.2 (first satisfied in OTP 20.2) -- public_key-1.5 (first satisfied in OTP 20.1)

OTP-14843
Application(s):
ssl

Optimization of bad merge conflict resolution causing dubble decode

OTP-14852
Application(s):
ssl

Restore error propagation to OTP-19.3 behaviour, in OTP-20.2 implementation adjustments to gen_statem needed some further adjustments to avoid a race condition. This could cause a TLS server to not always report file path errors correctly.

OTP-14871
Application(s):
ssl

Corrected RC4 suites listing function to regard TLS version

OTP-14919
Application(s):
ssl

Fix alert handling so that unexpected messages are logged and alerted correctly

OTP-14929
Application(s):
ssl

Fix alert handling so that unexpected messages are logged and alerted correctly

OTP-14952
Application(s):
ssl

Correct handling of anonymous cipher suites

OTP-14760
Application(s):
ssl

*** HIGHLIGHT ***

Added new API functions to facilitate cipher suite handling

OTP-14828
Application(s):
ssl

Correct TLS_FALLBACK_SCSV handling so that this special flag suite is always placed last in the cipher suite list in accordance with the specs. Also make sure this functionality is used in DTLS.

OTP-14892
Application(s):
ssl

Add TLS record version sanity check for early as possible error detection and consistency in ALERT codes generated

Full runtime dependencies of ssl-8.2.4: crypto-4.2, erts-7.0, inets-5.10.7, kernel-3.0, public_key-1.5, stdlib-3.2

stdlib-3.4.4 #

The stdlib-3.4.4 application can be applied independently of other applications on a full OTP 20 installation.

OTP-14832
Application(s):
stdlib
Related Id(s):
ERL-527

Correct filelib:find_source() and filelib:find_file() to by default also search one level below src. This is in accordance with the Design Principles which states that an application can have Erlang source files one level below the src directory.

OTP-14860
Application(s):
stdlib
Related Id(s):
1670 , PR

The contract of erl_tar:table/2 is corrected.

OTP-14889
Application(s):
kernel, stdlib

Correct a few contracts.

OTP-14942
Application(s):
stdlib
Related Id(s):
PR-1702

Fix string:prefix/2 to handle an empty string as second argument.

Full runtime dependencies of stdlib-3.4.4: compiler-5.0, crypto-3.3, erts-9.0, kernel-5.0, sasl-3.0

tools-2.11.2 #

Note! The tools-2.11.2 application can *not* be applied independently of other applications on an arbitrary OTP 20 installation. On a full OTP 20 installation, also the following runtime dependencies have to be satisfied: -- erts-9.1 (first satisfied in OTP 20.1) -- kernel-5.4 (first satisfied in OTP 20.1)

OTP-14817
Application(s):
tools
Related Id(s):
1641 , PR

A counting bug is corrected in Cover. The bug was introduced in Erlang/OTP 18.0.

OTP-14912
Application(s):
tools

The lcnt server will no longer crash if lcnt:information/0 is called before lcnt:collect/0.

OTP-14913
Application(s):
tools

lcnt:collect will now implicitly start the lcnt server, as per the documentation.

OTP-14944
Application(s):
tools

Improved indentation in emacs and various other updates.

Full runtime dependencies of tools-2.11.2: compiler-5.0, erts-9.1, kernel-5.4, runtime_tools-1.8.14, stdlib-3.4