Erlang/OTP 29.1

This release of Erlang/OTP can be built from source, installed using pre-built packages for your OS or third-party tools (such as kerl, asdf or mise), or run from the official Docker image:

docker run -it erlang:29.1

Potential Incompatibilities #

OTP-20118
Application(s):
stdlib
Related Id(s):

PR-11167

When beam_lib returns an error tuple, the filename in the information tuple is now a list of characters instead of an atom.

Example:

1> beam_lib:chunks(code:which(lists), ["nope"]).
{error,beam_lib,
       {missing_chunk,".../git/otp/lib/stdlib/ebin/lists.beam",
                      "nope"}}

The reason for this change is that a long file name is not guaranteed to fit in an atom. Applications or tools that do deep inspection of the beam_lib errors (not recommended) will need to be updated.

OTP-29.1 #

OTP-20352
Related Id(s):

PR-11556, PR-11600

A new versions module has been added to the runtime_tools application containing functions for, e.g., comparing, versions that adhere to the OTP Versions Scheme.

The documentation of the OTP Versions Scheme has also been improved.

asn1-5.5.1 #

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

OTP-20145
Related Id(s):

PR-11097

The modern representation of BITSTRINGs is now always supported for encoding, regardless of any legacy options given. The JER backend would not support the modern representation when any legacy option was given.

OTP-20295
Related Id(s):

PR-11375

The make clean command did not remove all generated .erl files.

Full runtime dependencies of asn1-5.5.1

erts-14.0, kernel-9.0, stdlib-5.0

common_test-1.31.2 #

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

OTP-20316
Related Id(s):

PR-11501

The internal cte_track event handler now correctly displays the suite name for suites without an init_per_suite/1 callback.

Full runtime dependencies of common_test-1.31.2

compiler-10.0, crypto-4.5, debugger-4.1, erts-7.0, ftp-1.0, inets-6.0, kernel-11.0, observer-2.1, runtime_tools-1.8.16, sasl-2.5, snmp-5.1.2, ssh-4.0, stdlib-8.0, syntax_tools-1.7, tools-3.2, xmerl-1.3.8

compiler-10.0.5 #

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

OTP-20254
Related Id(s):

GH-11351, PR-11359

Fixed a native record crash in the sys_core_fold compiler pass.

OTP-20255
Related Id(s):

GH-11352, PR-11363

The compiler could crash when compiling a map comprehension.

OTP-20262
Related Id(s):

GH-11367, PR-11379

Fixed a crash when the key pattern in a map comprehension was a bitstring.

OTP-20267
Related Id(s):

GH-11366, PR-11390

Fixed an issue that could crash the compiler when compiling comprehensions with the compr_assign feature enabled.

OTP-20280
Related Id(s):

GH-11414, PR-11424

Code that called erlang:0() inside a fun could crash the compiler.

OTP-20291
Related Id(s):

GH-11413, PR-11444

Fixed an internal error when lists:keyfind/3 is called with an argument that exceeds system limits.

OTP-20304
Related Id(s):

GH-11472, PR-11477

An incorrect useless_building warning has been eliminated.

OTP-20365
Related Id(s):

GH-11534, PR-11566

In rare circumstances, the type analysis pass of the compiler could run for many minutes.

Full runtime dependencies of compiler-10.0.5

crypto-5.1, erts-13.0, kernel-8.4, stdlib-8.0

crypto-5.10 #

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

OTP-20373
Related Id(s):

PR-11170

The documentation of the crypto module now contains runnable examples for most functions. The examples are verified by the crypto test suite, so they always match actual behavior.

Full runtime dependencies of crypto-5.10

erts-9.0, kernel-6.0, stdlib-3.9

dialyzer-6.0.3 #

The dialyzer-6.0.3 application can be applied independently of other applications on a full OTP 29 installation.

OTP-19631
Related Id(s):

GH-11093, PR-11096

Fixed Dialyzer crash when overriding built-in types.

OTP-20297
Related Id(s):

PR-11466

Typer crashed when multiple functions were written in the same line. For example:

-module(m).
f() -> ok. g() -> ok.

Full runtime dependencies of dialyzer-6.0.3

compiler-10.0, erts-12.0, kernel-8.0, stdlib-5.0, syntax_tools-2.0

erts-17.1 #

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

OTP-20152
Related Id(s):

PR-11115

Fixed bug in ets:member/2 for set, bag and duplicate_bag. The bug could (maybe) lead to ets:member spuriously returning false for a value which is actually a member for a table that faces high insert load.

OTP-20175
Related Id(s):

PR-11196

Fixed crashing bug caused by race between timer creating process and suspending receiver of the timer. Only seen to cause crash one time by extremely provoking test case. Bug exists only since OTP 29.0.

OTP-20187
Related Id(s):

PR-11133

Fixed bug in enif_realloc_binary when called with a read-only binary. Instead of returning false at out-of-memory failure, it returned true and did nothing.

OTP-20213
Related Id(s):

GH-11248, PR-11249

Fixed alternate signal stack sizing on musl (Alpine) running on CPUs whose Linux kernel reports large signal frames (AVX-512/AMX). It caused emulator to abort during startup with “Failed to set alternate signal stack”.

OTP-20246
Related Id(s):

PR-11335

For socket:recvmmsg/6, the buffer length was not handled correctly when the OS network stack truncated the received message, so garbage data with incorrect length could be delivered to the calling process. This bug has been corrected.

OTP-20276
Related Id(s):

GH-11398, PR-11410

binary_to_term/1 will now reject an external native record with duplicated fields.

OTP-20292
Related Id(s):

GH-11349, PR-11376

Fixed a crash upon starting the emulator on systems with a very large minimum signal stack size.

OTP-20305
Related Id(s):

PR-11460

Fixed lock order violation during crash dump due to export table exhaustion. Only problem for debug emulator.

OTP-20317
Related Id(s):

PR-11391

Fixed rounding errors when converting large integers to floating point numbers, explicitly with float/1 or implicitly in arithmetic such as 1.0 * N. Integers with absolute values larger than 64 bits that could not be represented exactly as a float could be rounded to the second nearest float instead of the nearest. For example, float(428654966685883400000) returned 4.2865496668588343e20 instead of the correct 4.286549666858834e20, which is what binary_to_float/1 returns for the same number.

OTP-20356
Related Id(s):

PR-11438

An error check in prim_inet has been fixed. This manifested itself as file:sendfile/* sometimes crashing instead of returning an error when the remote end closes the socket during initialization.

OTP-20188
Related Id(s):

PR-11144

Fairness of code permission locks have been improved to avoid long latencies for code loading and trace operations.

OTP-20209
Related Id(s):

PR-11074, PR-11324

The BIFs that convert strings to integers (for example binary_to_integer/1) are now much faster for huge input strings. On a modern computer, even a string with more than a million decimal digits should finish in less than a second.

The div and rem operators are now also much faster for large operands.

OTP-20211
Related Id(s):

PR-11274

Arithmetic operations on large integers will now increase the reduction count for the process, causing context switches to occur more frequently when doing arithmetic on large integers.

Full runtime dependencies of erts-17.1

kernel-9.0, sasl-3.3, stdlib-4.1

inets-9.8 #

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

OTP-20249
Related Id(s):

GH-11119, PR-11316

OPTIONS is now accepted for HTTP/1.x requests and routed through the normal module pipeline like other standard methods. Requests that no module handles still receive a 501 (Not Implemented) response, so behavior is unchanged for deployments that do not add explicit OPTIONS handling.

Full runtime dependencies of inets-9.8

erts-14.0, kernel-9.0, mnesia-4.12, public_key-1.13, runtime_tools-1.8.14, ssl-9.0, stdlib-5.0, stdlib-6.0

kernel-11.0.4 #

The kernel-11.0.4 application can be applied independently of other applications on a full OTP 29 installation.

OTP-20131
Related Id(s):

GH-10968, OTP-20102

Fixed incorrect TOS format when using gen_udp with the socket backend.

OTP-20228
Related Id(s):

PR-11300

Decoding of names in inet_res has been tightened to not allow names longer than 255 octets, as according to RFC 1035.

Decoding has also been made more strict by only allowing compression pointers to lower positions in the message.

A few bugs when decoding malformed truncated DNS messages have also been fixed, as well as handling broken UTF-8 content in NAPTR RR:s regular expressions field.

OTP-20238
Related Id(s):

PR-11284

When using the socket backend in gen_tcp, the default value for the read_ahead option was incorrect and has been corrected, according the documentation, to be true.

OTP-20265
Related Id(s):

GH-11308, PR-11388

A field in net_kernel’s internal state was not cleaned up in some cases for failed connections could cause the state to grow indefinitely over time. This has now been fixed.

OTP-20303
Related Id(s):

GH-11360, PR-11361

Fixed pg:which_groups/1 to not include empty groups where all members have leaved. Bug existed since OTP 29.0.

Full runtime dependencies of kernel-11.0.4

crypto-5.8, erts-17.0, sasl-3.0, stdlib-8.0

mnesia-4.27 #

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

OTP-20256
Related Id(s):

GH-11344, PR-11426

Fixed mnesia:force_load_table/1 getting stuck when the remote node becomes unreachable during table loading. When a network loader is aborted due to sender node going down and a user has forced a table load, we now retry loading from disc instead. Additionally, for disc_only_copies tables, the process actually loading the table is the dets server process, not the mnesia loader, so it would not receive the abort notification and would hang indefinitely. Now it correctly receives the notification and aborts table loading.

OTP-20364
Related Id(s):

PR-11563

Fixed incorrect results from mnesia:select_reverse/2,3 on ordered_set tables inside a transaction that had already written to or deleted from the same table. Deleted records could reappear, updated records could appear twice, and the descending order was not preserved.

OTP-20374
Related Id(s):

PR-11216

The documentation of the mnesia module now contains runnable examples for most functions. The examples are verified by the mnesia test suite, so they always match actual behavior.

Full runtime dependencies of mnesia-4.27

erts-9.0, kernel-5.3, stdlib-5.0

odbc-2.17.1 #

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

OTP-20328
Related Id(s):

GH-9302, PR-10297

Added the max_long_column_size option to limit buffer allocation size preventing memory exhaustion.

Full runtime dependencies of odbc-2.17.1

erts-6.0, kernel-3.0, stdlib-2.0

public_key-1.21.6 #

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

OTP-20318
Related Id(s):

PR-11378

Added missing no_cacerts_found clauses so that the intended {failed_load_cacerts, no_cacerts_found} error is raised and formatted properly.

OTP-20367
Related Id(s):

PR-11574

Align moduli and pubkey_moduli.hrl to state on OTP-28 and newer.

OTP-20338
Related Id(s):

GH-10879, PR-11226

Worked around domain component using wrong ASN-1 PrintableString encoding instead of IA5String encoding.

OTP-20362
Related Id(s):

GH-4417, PR-11396

ASN.1 files are now compiled sequentially to guarantee reproducible builds.

Full runtime dependencies of public_key-1.21.6

asn1-5.0, crypto-5.8, erts-13.0, kernel-8.0, stdlib-4.0

runtime_tools-2.5 #

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

OTP-20218
Related Id(s):

PR-11260

Fixed bug if a process that called dbg:session/2 exits before dbg:session_destroy/1 is called. An error report was logged and any trace messages lost and not delivered.

OTP-20352
Related Id(s):

PR-11556, PR-11600

A new versions module has been added to the runtime_tools application containing functions for, e.g., comparing, versions that adhere to the OTP Versions Scheme.

The documentation of the OTP Versions Scheme has also been improved.

Full runtime dependencies of runtime_tools-2.5

erts-16.0, kernel-10.0, mnesia-4.12, stdlib-6.0

ssl-11.7.6 #

Note! The ssl-11.7.6 application cannot be applied independently of other applications on an arbitrary OTP 29 installation.

   On a full OTP 29 installation, also the following runtime
   dependency has to be satisfied:
   -- public_key-1.21.1 (first satisfied in OTP 29.0.1)
OTP-20327
Related Id(s):

GH-11338, PR-11356

Undecodable certificate_authorities names are now skipped, as they are just a hint.

OTP-20358
Related Id(s):

ERIERL-1356, PR-11570

Corrected generated keylog information generated from the keylog_hs option in the corner case that it was invoked after the client had reached its connection state, but the server closed the connection before it reached its connection state.

OTP-20326
Related Id(s):

PR-11440

Added TLS-1.3 selected_group to ssl:connection_information/2.

OTP-20331
Related Id(s):

PR-11345

The ECDHE-PSK Chacha20-Poly1305 cipher suites are now supported. This is relevant for TLS-1.2 (and lower).

Full runtime dependencies of ssl-11.7.6

crypto-5.8, erts-16.0, inets-5.10.7, kernel-10.3, public_key-1.21.1, runtime_tools-1.15.1, stdlib-7.0

stdlib-8.1 #

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

OTP-20118
POTENTIAL INCOMPATIBILITY
 

When beam_lib returns an error tuple, the filename in the information tuple is now a list of characters instead of an atom.

Example:

1> beam_lib:chunks(code:which(lists), ["nope"]).
{error,beam_lib,
       {missing_chunk,".../git/otp/lib/stdlib/ebin/lists.beam",
                      "nope"}}

The reason for this change is that a long file name is not guaranteed to fit in an atom. Applications or tools that do deep inspection of the beam_lib errors (not recommended) will need to be updated.

OTP-20158
Related Id(s):

PR-11165

The default seed in the rand module has been improved to spread out its entropy over all three seed words.

This avoids identical first random numbers from two successive seeds on machines with low system time resolution.

OTP-20169
Related Id(s):

PR-11130

Fixed unicode:characters_to_binary/2 to handle incomplete utf-32 sequences without crashing.

Also fixed a performance regression in unicode:characters_to_nfkd_list/1.

OTP-20177
Related Id(s):

PR-11159

The array module has been improved. array:slice/3 now raises badarg for negative lengths.

The performance of array:mapfoldl/3 and array:sparse_mapfoldl/3 has been improved.

The documentation has been clarified regarding array growth/shrink behavior and how concat/1,2 handles mixed arrays.

OTP-20277
Related Id(s):

GH-11397, PR-11422

Added more checks in the linter for badly formed {Name,Arity} attributes

OTP-20298
Related Id(s):

PR-11313

Fixed return value of zip:zip_get/2. When a file was extracted to a directory, the function returned a map instead of a file name.

OTP-20309
Related Id(s):

GH-11406, PR-11567

When compr_assign is enabled, the linter will correctly check for unbounded variables after block expressions in comprehensions.

OTP-20320
Related Id(s):

GH-11423, PR-11505

When compiling a module with a triple-quoted string with escape sequences and a chunk boundary happened to fall just after an escape character, that character was not passed to the reentrancy continuation, so the scanner interpreted the following characters as not an escape sequence.

This bug has now been fixed.

OTP-20322
Related Id(s):

PR-11446

Fixed some errors in examples in the documentation for the string and uri_string modules.

OTP-20354
Related Id(s):

GH-11401, PR-11552

Linter will emit better error messages when a behaviour attribute has a bad module name.

OTP-20235
Related Id(s):

GH-7862, PR-11129

uri_string:parse/1 now reports the actual offending character in error tuples instead of reporting a misleading cascade-failure position.

Previously, when parsing a URI containing an invalid character (such as | or non-ASCII characters like ö), the error tuple would point to the : character — the position where the parser’s final backtracking attempt failed — rather than the character that actually violated the URI grammar. For example, uri_string:parse("http://localhost/A|B") returned {error,invalid_uri,":"} instead of the more helpful {error,invalid_uri,"|"}

OTP-20236
Related Id(s):

PR-11128

Fixed a guard precedence bug in uri_string:compose_query/2 that caused inconsistent error handling depending on the encoding option.

When compose_query/2 was called with invalid input (e.g. an atom instead of a string) and {encoding, unicode}, it would crash with ** exception error: bad argument instead of returning the expected {error, invalid_input, Term} tuple. The same call with {encoding, utf8} correctly returned the error tuple. Both encoding options now consistently return {error, invalid_input, Term} for invalid input.

Full runtime dependencies of stdlib-8.1

compiler-5.0, crypto-4.5, erts-16.0.3, kernel-11.0, sasl-3.0, syntax_tools-3.2.1

syntax_tools-4.1.1 #

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

OTP-20180
Related Id(s):

GH-11155, PR-11203

Fixed exception when the epp_dodger AST contains macro-named record.

OTP-20290
Related Id(s):

PR-11442

Any caller who passed a single syntax tree that was not a form_list (e.g. erl_recomment:recomment_forms(erl_syntax:atom(foo), Cs) or any expression/function tree) would get a hard crash instead of the documented result. This issue has been fixed.

Full runtime dependencies of syntax_tools-4.1.1

compiler-9.0, erts-16.0, kernel-10.3, stdlib-8.0

tools-4.2.3 #

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

OTP-20293
Related Id(s):

PR-11447

The tags.erl module is used to generate TAGS files for Emacs. There was a case where single quote items starting in position 0 would crash the scanner. This use case can potentially happen in docstrings, although not too common. This fix makes the scanner to handle such cases instead of crashing.

OTP-20339
Related Id(s):

PR-11507

Updated the Emacs skeleton to reflect latest format_status callback handling.

Full runtime dependencies of tools-4.2.3

compiler-8.5, crypto-5.9, erts-15.0, kernel-10.0, public_key-1.21, runtime_tools-2.1, stdlib-6.0

wx-2.7 #

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

OTP-20335
Related Id(s):

PR-11530

A large set of correctness and robustness fixes were applied across the wx application, addressing issues found by static analysis of both the Erlang and C/C++ sources.

OTP-20189
Related Id(s):

PR-11137

Removed configure checks that prevented cross compilation of wx. Note that cross compilation is not tested and may require manual configuration.

Full runtime dependencies of wx-2.7

erts-12.0, kernel-8.0, stdlib-5.0

Thanks To #

Alois Vitasek, Anton Thomasson, ausimian, Bernhard M. Wiedemann, Cole Christensen, Dmitri Vereshchagin, Dmytro Lytovchenko, Eric Meadows-Jönsson, haoxian, Jianbo He, João Henrique Ferreira de Freitas, Johan Bevemyr, John Downey, Jonatan Männchen, Julian Doherty, kagetora66, k-patrik, Louis Pilfold, Lukasz Samson, Luke Bakken, Maria Scott, Mikael Pettersson, Paul Guyot, Renato Ceolin, ruslandoga, Scott Wiggins, Stanislav Yaglo, Thomas Arts, Thomas Cioppettini, Zeke Dou, zmstone