Erlang/OTP 18.1

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:18.1
Patch Package OTP 18.1
Git Tag OTP-18.1
Date 2015-09-22
Issue Id
seq12878
seq12891
seq12900
seq12906
seq12947
System OTP
Release 18
Application

Highlights #

OTP-11397
Application(s):
ssl

Add possibility to downgrade an SSL/TLS connection to a tcp connection, and give back the socket control to a user process.

This also adds the possibility to specify a timeout to the ssl:close function.

OTP-12622
Application(s):
ssh
Related Id(s):
OTP-12671 , OTP-12672

The key exchange algorithms 'ecdh-sha2-nistp256', 'ecdh-sha2-nistp384' and 'ecdh-sha2-nistp521' are implemented. See RFC 5656.

This raises the security level considerably.

OTP-12671
Application(s):
ssh
Related Id(s):
OTP-12622 , OTP-12672

The key exchange algorithm 'diffie-hellman-group14-sha1' is implemented. See RFC 4253.

This raises the security level.

OTP-12672
Application(s):
ssh
Related Id(s):
OTP-12622 , OTP-12671

The key exchange algorithms 'diffie-hellman-group-exchange-sha1' and 'diffie-hellman-group-exchange-sha256' are implemented. See RFC 4419.

This raises the security level.

OTP-12864
Application(s):
kernel, sasl, stdlib

A mechanism for limiting the amount of text that the built-in error logger events will produce has been introduced. It is useful for limiting both the size of log files and the CPU time used to produce them.

This mechanism is experimental in the sense that it may be changed if it turns out that it does not solve the problem it is supposed to solve. In that case, there may be backward incompatible improvements to this mechanism.

See the documentation for the config parameter error_logger_format_depth in the Kernel application for information about how to turn on this feature.

compiler-6.0.1 #

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

OTP-12967
Application(s):
compiler

Fix get_map_elements register corruption

Instruction get_map_elements might destroy target registers when the fail-label is taken. Only seen for patterns with two, and only two, target registers. Specifically if we copy one register and then jump.

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

crypto-3.6.1 #

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

OTP-12944
Application(s):
crypto

Make crypto:ec_curves/0 return empty list if elliptic curve is not supported at all.

Full runtime dependencies of crypto-3.6.1: erts-6.0, kernel-3.0, stdlib-2.0

debugger-4.1.1 #

The debugger-4.1.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12911
Application(s):
debugger
Related Id(s):
seq12906

Fix crash when starting a quick debugging session. Thanks Alan Duffield.

Full runtime dependencies of debugger-4.1.1: compiler-5.0, erts-6.0, kernel-3.0, stdlib-2.5, wx-1.2

dialyzer-2.8.1 #

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

OTP-12865
Application(s):
dialyzer

Improve the translation of forms to types.

OTP-12866
Application(s):
dialyzer

Fix a bug concerning parameterized opaque types.

OTP-12940
Application(s):
dialyzer

Fix a bug concerning parameterized opaque types.

OTP-12948
Application(s):
dialyzer, hipe

Fix bugs concerning erlang:abs/1.

OTP-12949
Application(s):
dialyzer, hipe

Fix a bug concerning lists:keydelete/3 with union and opaque types.

OTP-12964
Application(s):
dialyzer
Related Id(s):
OTP-12962 , OTP-12963

Use new function hipe:erts_checksum to get correct runtime checksum for cached beam files.

Full runtime dependencies of dialyzer-2.8.1: compiler-5.0, erts-7.0, hipe-3.13, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14, wx-1.2

diameter-1.11 #

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

OTP-12879
Application(s):
diameter
Related Id(s):
OTP-12475

Fix relay encode of nested, Grouped AVPs.

A fault in OTP-12475 caused encode to fail if the first AVP in a Grouped AVP was itself Grouped.

OTP-12902
Application(s):
diameter

Match acceptable peer addresses case insensitively.

Regular expressions passed in an 'accept' tuple to diameter_tcp or diameter_sctp inappropriately matched case.

OTP-12969
Application(s):
diameter

Fix diameter_watchdog function clause.

OTP-12912 introduced an error with accepting transports setting {restrict_connections, false}, causing processes to fail when peer connections were terminated.

OTP-12871
Application(s):
diameter

Don't report 5005 (DIAMETER_AVP_MISSING) errors unnecessarily.

An AVP whose decode failed was reported as missing, despite having been reported with another error as a consequence of the failure.

OTP-12891
Application(s):
diameter

Improve decode performance.

The time required to decode a message increased quadratically with the number of AVPs in the worst case, leading to extremely long execution times.

OTP-12912
Application(s):
diameter

Improve watchdog and statistics performance.

Inefficient use of timers contributed to poor performance at high load, as did ordering of the table statistics are written to.

OTP-12947
Application(s):
diameter

Add service_opt() strict_mbit.

There are differing opinions on whether or not reception of an arbitrary AVP setting the M-bit is an error. The default interpretation is strict: if a command grammar doesn't explicitly allow an AVP setting the M-bit then reception of such an AVP is regarded as an error. Setting {strict_mbit, false} disables this check.

Full runtime dependencies of diameter-1.11: erts-6.0, kernel-3.0, ssl-5.3.4, stdlib-2.0

erts-7.1 #

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

OTP-12870
Application(s):
erts

Fix bug in ETS that could cause stray objects marked for deletion to occasionally be missed by the cleanup done by safe_fixtable(_,false).

OTP-12901
Application(s):
erts

Fixed VM crash that could occur if a trace port was linked to a process, and the trace port terminated abnormally while handling a trace message. This bug has always existed in the runtime system with SMP support.

OTP-12934
Application(s):
erts

Instead of aborting, the vm now creates a crash dump when a system process is terminated.

OTP-12943
Application(s):
erts

Fixed a rare emulator dead lock that occurred when erlang:process_flag(priority,...) was called by a process that was also scheduled for an internal system activity.

OTP-12954
Application(s):
erts

The runtime system on various posix platforms (except for Linux and Solaris) could crash when large amounts of file-descriptors were in use.

OTP-12962
Application(s):
erts, hipe

A beam file compiled by hipe for an incompatible runtime system was sometimes not rejected by the loader, which could lead to vm crash. This fix will also allow the same hipe compiler to be used by both normal and debug-built vm.

OTP-12965
Application(s):
erts

Fix bug in maps:merge/2 when called by hipe compiled code that could cause vm crash. Bug exists since erts-7.0 (OTP 18.0).

OTP-12968
Application(s):
erts

When tracing with process_dump option, the VM could abort if there was an ongoing binary match somewhere in the call stack of the traced process.

OTP-12987
Application(s):
erts
Related Id(s):
seq12947

Fixed possible output deadlock in tty driver when hitting "CTRL-C" in a non-smp emulator shell on unix.

OTP-12988
Application(s):
erts

Fix binary_to_integer to throw badarg for "+" and "-" similar to list_to_integer.

OTP-12989
Application(s):
erts

Suppress warning of unused argument when using macro enif_make_pid.

OTP-12945
Application(s):
erts
Related Id(s):
OTP-12892

Changed default clock source used for OS system time on MacOS X to gettimeofday() in order to improve performance. The system can be configured during build to use the previously used higher resolution clock source by passing the switch --with-clock-resolution=high when configuring the build.

OTP-12971
Application(s):
erts

Added the configure option --disable-saved-compile-time which disables saving of compile date and time in the emulator binary.

Full runtime dependencies of erts-7.1: kernel-4.0, sasl-2.4, stdlib-2.5

eunit-2.2.11 #

The eunit-2.2.11 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12952
Application(s):
eunit

Improve success message when 2 tests have passed

Full runtime dependencies of eunit-2.2.11: erts-6.0, kernel-3.0, stdlib-2.5

hipe-3.13 #

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

OTP-12948
Application(s):
dialyzer, hipe

Fix bugs concerning erlang:abs/1.

OTP-12949
Application(s):
dialyzer, hipe

Fix a bug concerning lists:keydelete/3 with union and opaque types.

OTP-12962
Application(s):
erts, hipe

A beam file compiled by hipe for an incompatible runtime system was sometimes not rejected by the loader, which could lead to vm crash. This fix will also allow the same hipe compiler to be used by both normal and debug-built vm.

OTP-12963
Application(s):
hipe
Related Id(s):
OTP-12962 , OTP-12964

New function hipe:erts_checksum/0 which returns a value identifying the target runtime system for the compiler. Used by dialyzer for its beam cache directory.

Full runtime dependencies of hipe-3.13: compiler-5.0, erts-7.1, kernel-3.0, stdlib-2.5, syntax_tools-1.6.14

inets-6.0.1 #

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

OTP-12875
Application(s):
inets
Related Id(s):
seq12878

Fix broken socket feature, that is on Linux systems a socket may be opened before starting Erlang and then passed to Erlang's httpd daemon. This is useful as the wrap program can open a privileged port and Erlang does not have to be run as root.

OTP-12898
Application(s):
inets
Related Id(s):
seq12900

Fix broken socket feature, that is on Linux systems a socket may be opened before starting Erlang and then passed to Erlangs tftp daemon. This is useful as the wrap program can open a privileged port and Erlang does not have to be run as root.

OTP-12922
Application(s):
inets

httpc_handler should react properly to cancel requests even when the request to be canceled was already finished but httpc_manager did not get notified about that yet.

OTP-12976
Application(s):
inets

Added format_status function to httpd process to avoid sensitive information to be printed in supervisor logs.

OTP-12984
Application(s):
inets

Return meaningful error reason disregarding whether a http proxy is used or not.

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

kernel-4.1 #

Note! The kernel-4.1 application can *not* be applied independently of other applications on an arbitrary OTP 18 installation. On a full OTP 18 installation, also the following runtime dependencies have to be satisfied: -- sasl-2.6 (first satisfied in OTP 18.1) -- stdlib-2.6 (first satisfied in OTP 18.1)

OTP-12864
Application(s):
kernel, sasl, stdlib

*** HIGHLIGHT ***

A mechanism for limiting the amount of text that the built-in error logger events will produce has been introduced. It is useful for limiting both the size of log files and the CPU time used to produce them.

This mechanism is experimental in the sense that it may be changed if it turns out that it does not solve the problem it is supposed to solve. In that case, there may be backward incompatible improvements to this mechanism.

See the documentation for the config parameter error_logger_format_depth in the Kernel application for information about how to turn on this feature.

Full runtime dependencies of kernel-4.1: erts-7.0, sasl-2.6, stdlib-2.6

mnesia-4.13.1 #

The mnesia-4.13.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12972
Application(s):
mnesia

Improved index updates to avoid a timing glitch in dirty_index_read.

Full runtime dependencies of mnesia-4.13.1: erts-7.0, kernel-3.0, stdlib-2.0

odbc-2.11.1 #

The odbc-2.11.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12935
Application(s):
odbc

New application variable to set timeout of internal communication setup between the erlang code and the c-port program that interfaces the odbc driver. This can be useful if you have an underlying system that is slow due to heavy load at startup.

With this environment variable you can easily bypass and tailor odbc to the needs of the underlying actual system without changing the configuration. Which is a good thing because this value is very system specific.

Full runtime dependencies of odbc-2.11.1: erts-6.0, kernel-3.0, stdlib-2.0

public_key-1.0.1 #

The public_key-1.0.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12986
Application(s):
public_key

Document enhancements

Full runtime dependencies of public_key-1.0.1: asn1-3.0, crypto-3.3, erts-6.0, kernel-3.0, stdlib-2.0

sasl-2.6 #

Note! The sasl-2.6 application can *not* be applied independently of other applications on an arbitrary OTP 18 installation. On a full OTP 18 installation, also the following runtime dependencies have to be satisfied: -- kernel-4.1 (first satisfied in OTP 18.1) -- stdlib-2.6 (first satisfied in OTP 18.1)

OTP-12864
Application(s):
kernel, sasl, stdlib

*** HIGHLIGHT ***

A mechanism for limiting the amount of text that the built-in error logger events will produce has been introduced. It is useful for limiting both the size of log files and the CPU time used to produce them.

This mechanism is experimental in the sense that it may be changed if it turns out that it does not solve the problem it is supposed to solve. In that case, there may be backward incompatible improvements to this mechanism.

See the documentation for the config parameter error_logger_format_depth in the Kernel application for information about how to turn on this feature.

Full runtime dependencies of sasl-2.6: erts-6.0, kernel-4.1, stdlib-2.6, tools-2.6.14

ssh-4.1 #

The ssh-4.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-11531
Application(s):
ssh

Send an understandable disconnect message when the key exchange phase can't find a common algorithm. There are also some test cases added.

OTP-12853
Application(s):
ssh
Related Id(s):
seq12891

The third parameter in ssh_sftp:write_file is now accepting iolists again. Unicode handling adjusted.

OTP-12230
Application(s):
ssh

First part of ssh test suite re-organization and extension.

OTP-12622
Application(s):
ssh
Related Id(s):
OTP-12671 , OTP-12672

*** HIGHLIGHT ***

The key exchange algorithms 'ecdh-sha2-nistp256', 'ecdh-sha2-nistp384' and 'ecdh-sha2-nistp521' are implemented. See RFC 5656.

This raises the security level considerably.

OTP-12671
Application(s):
ssh
Related Id(s):
OTP-12622 , OTP-12672

*** HIGHLIGHT ***

The key exchange algorithm 'diffie-hellman-group14-sha1' is implemented. See RFC 4253.

This raises the security level.

OTP-12672
Application(s):
ssh
Related Id(s):
OTP-12622 , OTP-12671

*** HIGHLIGHT ***

The key exchange algorithms 'diffie-hellman-group-exchange-sha1' and 'diffie-hellman-group-exchange-sha256' are implemented. See RFC 4419.

This raises the security level.

OTP-12831
Application(s):
ssh

Adding random length extra padding as recommended in RFC 4253 section 6.

OTP-12858
Application(s):
ssh

New test library for low-level protocol testing. There is also a test suite using it for some preliminary tests. The intention is to build on that for more testing of individual ssh messages. See lib/ssh/test/ssh_trpt_test_lib.erl and ssh_protocol_SUITE.erl in the same directory.

OTP-12937
Application(s):
ssh

Increased default values for diffie-hellman-group-exchange-sha* to Min = 1024, N = 6144, Max = 8192.

Added 6144 and 8192 bit default gex groups.

OTP-12938
Application(s):
ssh

The mac algorithm 'hmac-sha2-512' is implemented. See RFC 6668.

Full runtime dependencies of ssh-4.1: crypto-3.3, erts-6.0, kernel-3.0, public_key-0.22, stdlib-2.3

ssl-7.1 #

The ssl-7.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12974
Application(s):
ssl

Add DER encoded ECPrivateKey as valid input format for key option.

OTP-12980
Application(s):
ssl

Correct return value of default session callback module

This error had the symptom that the client check for unique session would always fail, potentially making the client session table grow a lot and causing long setup times.

OTP-11397
Application(s):
ssl

*** HIGHLIGHT ***

Add possibility to downgrade an SSL/TLS connection to a tcp connection, and give back the socket control to a user process.

This also adds the possibility to specify a timeout to the ssl:close function.

OTP-12832
Application(s):
ssl

Add application setting to be able to change fatal alert shutdown timeout, also shorten the default timeout. The fatal alert timeout is the number of milliseconds between sending of a fatal alert and closing the connection. Waiting a little while improves the peers chances to properly receiving the alert so it may shutdown gracefully.

Full runtime dependencies of ssl-7.1: crypto-3.3, erts-6.0, inets-5.10.7, kernel-3.0, public_key-1.0, stdlib-2.0

stdlib-2.6 #

Note! The stdlib-2.6 application can *not* be applied independently of other applications on an arbitrary OTP 18 installation. On a full OTP 18 installation, also the following runtime dependencies have to be satisfied: -- kernel-4.1 (first satisfied in OTP 18.1) -- sasl-2.6 (first satisfied in OTP 18.1)

OTP-12946
Application(s):
stdlib

In OTP 18.0, qlc does not handle syntax errors well. This bug has been fixed.

OTP-12950
Application(s):
stdlib

Optimize zip:unzip/2 when uncompressing to memory.

OTP-12973
Application(s):
stdlib

The stdlib reference manual is updated to show correct information about the return value of gen_fsm:reply/2.

OTP-12977
Application(s):
stdlib

re:split2,3 and re:replace/3,4 now correctly handles pre-compiled patterns that have been compiled using the 'unicode' option.

OTP-12990
Application(s):
stdlib

Export shell:catch_exception/1 as documented.

OTP-12864
Application(s):
kernel, sasl, stdlib

*** HIGHLIGHT ***

A mechanism for limiting the amount of text that the built-in error logger events will produce has been introduced. It is useful for limiting both the size of log files and the CPU time used to produce them.

This mechanism is experimental in the sense that it may be changed if it turns out that it does not solve the problem it is supposed to solve. In that case, there may be backward incompatible improvements to this mechanism.

See the documentation for the config parameter error_logger_format_depth in the Kernel application for information about how to turn on this feature.

Full runtime dependencies of stdlib-2.6: compiler-5.0, crypto-3.3, erts-7.0, kernel-4.1, sasl-2.6

tools-2.8.1 #

The tools-2.8.1 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12981
Application(s):
tools

If a module includes eunit.hrl, a parse transform adds the function test/0 on line 0 in the module. A bug in OTP-18.0 caused cover:analyse_to_file/1 to fail to insert cover data in the output file when line 0 existed in the cover data table. This is now corrected.

Full runtime dependencies of tools-2.8.1: compiler-5.0, erts-7.0, inets-5.10, kernel-3.0, runtime_tools-1.8.14, stdlib-2.5, webtool-0.8.10

wx-1.5 #

The wx-1.5 application can be applied independently of other applications on a full OTP 18 installation.

OTP-12961
Application(s):
wx

Extend AUI functionality.

Full runtime dependencies of wx-1.5: erts-6.0, kernel-3.0, stdlib-2.0

Thanks To #

Attila Gulyas, Constantin Rack, Daniel Goertzen, Eric Meadows-Jönsson, Jimmy Zöger, Kirilll Zaborsky, Leo Liu, Lukas Larsson, Mikael Pettersson, Red, Shane Howley, Stefan Strigler, Yuki Ito, eksperimental, tmanevik