Erlang/OTP 17.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:17.1
Bug fix release : otp_src_17.1
Build date      : 2014-06-24

This is 17.1, the first maintenance release for the 17 major release.

You can find the README file for the release at

  http://www.erlang.org/download/otp_src_17.1.readme (this file)

The source distribution and binary distributions for Windows can be
downloaded from

  http://www.erlang.org/download/otp_src_17.1.tar.gz
  http://www.erlang.org/download/otp_win32_17.1.exe
  http://www.erlang.org/download/otp_win64_17.1.exe

Note: To unpack the TAR archive you need a GNU TAR compatible program.

For installation instructions please read the README file that is part
of the distribution.

The on-line documentation can be found at: http://www.erlang.org/doc/
You can also download the complete HTML documentation or the Unix manual files

  http://www.erlang.org/download/otp_doc_html_17.1.tar.gz
  http://www.erlang.org/download/otp_doc_man_17.1.tar.gz

We also want to thank those that sent us patches, suggestions and bug reports,

The OTP Team


--- asn1-3.0.1 ----------------------------------------------------------

   OTP-11372  The ASN.1 compiler now generates code that doesn't trigger
	      Dialyzer warnings. Along the way, a few minor bugs were
	      fixed.

--- common_test-1.8.1 ---------------------------------------------------

   OTP-11871  Substrings in long telnet messages would sometimes get
	      wrongly reversed. This error has been corrected.

   OTP-11917  The basic_html logging mode in Common Test (for compatibility
	      with old browsers) generated HTML code with unbalanced tags.
	      This has been fixed.

   OTP-11971  The mechanism for running code cover analysis with
	      common_test has been improved. Earlier, if a test run
	      consisted of multiple tests, cover would be started and
	      stopped for each test. This would give "intermediate" cover
	      logs available from the "Coverage log" link on the test suite
	      result pages. To accumulate cover data over all tests, the
	      'export' option had to be used in the cover spec file. This
	      was not well documented, and the functionality was quite
	      confusing.

	      Using the 'nodes' option in the cover spec file would fail
	      when the test run consisted of multiple tests, since the
	      specified nodes would only be included in the cover analysis
	      of the first test.

	      The repeated compilation and analysis of the same modules was
	      also very time consuming.

	      To overcome these problems, ct will now only cover compile
	      and analyze modules once per test run, i.e. once for each
	      cover spec file. The log file is available via a new button
	      on the top level index page. The old "Coverage log" links on
	      the test suite result pages still exist, but they all point
	      to the same log containing the accumulated result.

   OTP-11988  If multiple tests would run simultaneously on different
	      Erlang nodes, writing their logs to the same directory, then
	      there would often be entries in the all_runs.html log file
	      showing incomplete results (all zeroes) upon completion. This
	      problem was caused by a bug in the Common Test log cache
	      mechanism, which has been fixed.

--- compiler-5.0.1 ------------------------------------------------------

   OTP-11947  A Dialyzer crash involving analysis of Map types has now been
	      fixed.

   OTP-11987  The compiler would fail to compile a file with a latin-1
	      character in the false branch of an -ifdef or -indef. (Thanks
	      to Richard Carlsson for reporting this bug.)

--- crypto-3.4 ----------------------------------------------------------

   OTP-11911  Add aes_cfb8 cypher to crypto:block_encrypt and
	      block_decrypt.

   OTP-11953  Fix memory leak in crypto:hmac_init/upgrade/final functions
	      for all data and in crypto:hmac/3/4 for data larger than
	      20000 bytes. Bug exists since OTP 17.0.

   OTP-11999  Fix memory leak in crypto for elliptic curve.

--- debugger-4.0.1 ------------------------------------------------------

   OTP-11922  Fix evaluation of map updates in the debugger and erl_eval

	      Reported-by: José Valim

--- dialyzer-2.7.1 ------------------------------------------------------

   OTP-11869  Fix a bug concerning opaque types. Thanks to Shayan Pooya for
	      pointing out the bug.

   OTP-11918  A bug where Dialyzer failed to handle typed records with
	      fields containing remote types has been fixed. Thanks to Erik
	      Søe Sørensen for reporting the bug.

   OTP-11935  Make sure that only literal records are checked against the
	      types of record definitions. Until now the elements of tuples
	      have been checked against record field types if the tag and
	      size of the tuple matches the record definition, often with
	      surprising results.

   OTP-11947  A Dialyzer crash involving analysis of Map types has now been
	      fixed.

--- diameter-1.7 --------------------------------------------------------

   OTP-11721  Improve robustness.

	      Counters returned by diameter:service_info/2 now only count
	      messages known to the dictionary in question, so that an
	      attacker cannot cause arbitrarily many counters to be
	      created.

	      Messages to the Erlang log have been minimized, and those
	      related to traffic have been removed entirely since an
	      attacker could cause a node to be logged to death.
	      Consequently, the default answer_errors configuration has
	      been changed from report to discard. A service needs to be
	      restarted for the change in default to take effect.

   OTP-11891  Add result code counters for CEA, DWA, and DPA.

	      In addition to the existing result code counters on other
	      answer messages.

   OTP-11893  Fix request table leak.

	      Outgoing Diameter requests are stored in a table until an
	      answer is received or times out. Calling
	      diameter:stop_service/1 before this took place would orphan
	      the entries, resulting in a memory leak.

   OTP-11901  Fix broken SCTP transport.

	      OTP-11593 caused the sending of answer messages over SCTP to
	      fail.

   OTP-11934  Fix watchdog process leak.

	      A failed capabilities exchange on a listening transport would
	      orphan a process, causing a memory leak.

   OTP-11936  Add best-effort decode of AVPs within Failed-AVP.

	      OTP-11007 disabled the decode of AVPs in Failed-AVP since
	      errors could cause the decode of Failed-AVP itself to fail.
	      Component AVPs are now decoded if possible, otherwise not.
	      AVPs of type Grouped are decoded as much as possible, as
	      deeply as possible.

   OTP-11937  Add counters for encode errors in outgoing Diameter messages.

	      In addition to the existing counters on decode errors. The
	      latter now count independently of result codes in answer
	      messages since decode errors do not preclude the presence of
	      a result code.

   OTP-11938  Fix incorrect handling of incoming DPR.

	      In the case of a listening transport, a reconnection by a
	      peer following DPR could transition the watchdog state to
	      REOPEN instead of OKAY.

   OTP-11946  Fix handling of AVP length errors on unknown AVPs.

	      An AVP (Header) length that pointed past the end of the
	      message was not flagged as a 5014 error in this case.
	      Moreover, encoding such an AVP in the Failed-AVP of an answer
	      message as a consequence of other errors (e.g M-bit,
	      resulting in 5001) failed if the AVP contained a complete
	      header.

   OTP-11958  Fix broken check in dictionary compilation.

	      That an AVP specified in the content of a @codecs or
	      @custom_types section was undefined went undetected, causing
	      compilation to fail when attempting to lookup the AVP's type.

--- erl_interface-3.7.17 ------------------------------------------------

   OTP-11984  Now works with Visual Studio.

--- erts-6.1 ------------------------------------------------------------

   OTP-11849  The documentation for spawn_opt/5 now has a note mentioning
	      that the monitor option is not supported.

   OTP-11852  Fix broken system monitoring of large_heap for non-smp VM. No
	      message for large_heap was ever sent on non-smp VM. Bug exist
	      since R16B.

   OTP-11859  Fixed type spec of erlang:system_info/1.

   OTP-11887  The emulator without SMP support crashed when passing a
	      message to a process without enough heap space for the
	      message. This bug was introduced in erts-6.0.

   OTP-11888  The following native functions now bump an appropriate amount
	      of reductions and yield when out of reductions:

	      -- erlang:binary_to_list/1

	      -- erlang:binary_to_list/3

	      -- erlang:bitstring_to_list/1

	      -- erlang:list_to_binary/1

	      -- erlang:iolist_to_binary/1

	      -- erlang:list_to_bitstring/1

	      -- binary:list_to_bin/1

	      Characteristics impact:

	      -- Performance -- The functions converting from lists got a
	      performance loss for very small lists, and a performance gain
	      for very large lists.

	      -- Priority -- Previously a process executing one of these
	      functions effectively got an unfair priority boost. This
	      priority boost depended on the input size. The larger the
	      input was, the larger the priority boost got. This unfair
	      priority boost is now lost.

   OTP-11892  Fix race between ETS table deletion and unfixation that could
	      cause VM crash. The race could happen between a terminating
	      process that does not own the table but has a fixation on it
	      and another process that deletes the table (maybe the owner
	      terminating) at the same time. Bug existed since R15B02.

   OTP-11916  The string following the -eval option when invoking erl would
	      not be properly translated from UTF-8 to a list of Unicode
	      characters (as would the arguments for -run).

	      That bug would cause the build of Erlang/OTP to fail when
	      building in a directory whose pathname contained non-US ASCII
	      characters encoded in UTF-8. (Thanks to Eric Pailleau for
	      reporting this bug.)

   OTP-11921  The systemd features of epmd have been removed from epmd by
	      default. To enable them you have to build erlang with the
	      configure option --enable-systemd.

   OTP-11923  Fix erts_debug:size/1 to handle Map sizes

   OTP-11931  Removed Erlang wrapper code used when calling
	      binary_to_term/1 and binary_to_term/2. This improves the
	      performance of these BIFs especially when they are called
	      with small binaries as input.

   OTP-11942  Removed erlang:bitstr_to_list/1 and erlang:list_to_bitstr/1.
	      They were added by mistake, and have always raised an
	      undefined exception when called.

   OTP-11945  Fixed compilation using mingw-w64 on Windows.

	      Thanks to Jani Hakala.

   OTP-11961  The git sha is no longer printed in the shell start header
	      when erlang is built from a tagged git release.

   OTP-11968  Fixed a bug where send trace events were erroneously dropped
	      when the send was done to a registered process. This bug was
	      introduced in R16B.

   OTP-11970  Add erlang:system_info(tolerant_timeofday), an API to check
	      whether compensation for sudden changes of system time is
	      enabled or not.

--- hipe-3.11 -----------------------------------------------------------

   OTP-11900  Handle Maps instructions get_map_elements, put_map_assoc,
	      put_map_exact in HiPE compiler.

   OTP-11947  A Dialyzer crash involving analysis of Map types has now been
	      fixed.

--- inets-5.10.2 --------------------------------------------------------

   OTP-11914  Correct distirbing mode for httpd:reload_config/2

   OTP-11925  Improved handling of invalid strings in the HTTP request
	      line.

	      Impact: May improve memory consumption

   OTP-11992  httpc: Fix streaming bugs when handling small responses

--- kernel-3.0.1 --------------------------------------------------------

   OTP-11864  If the Config given to
	      application_controller:change_application_data included other
	      config files, it was only expanded for already existing
	      (loaded) applications. If an upgrade added a new application
	      which had config data in an included config file, the new
	      application did not get correct config data.

	      This is now changed so config data will be expanded for all
	      applications.

   OTP-11913  It was allowed to re-load pre-loaded modules such as erlang,
	      but that could cause strange and unwanted things to happen,
	      such as call apply/3 to loop. Pre-loaded modules are now
	      sticky by default. (Thanks to Loïc Hoguin for reporting this
	      bug.)

	      code:add_path("/ending/in/slash/") removes the trailing
	      slash, adding /ending/in/slash to the code path. However,
	      code:del_path("/ending/in/slash/") would fail to remove the
	      path since it did not remove the trailing slash. This has
	      been fixed.

   OTP-11923  Fix erts_debug:size/1 to handle Map sizes

   OTP-11982  The documentation for file:file_info/1 has been removed. The
	      function itself was removed a long time ago.

--- mnesia-4.12.1 -------------------------------------------------------

   OTP-11948  Force load table could hang when a node went away during
	      start up.

   OTP-11981  The time for inserting locks for a transaction with large
	      number of locks is reduced significantly.

--- observer-2.0.1 ------------------------------------------------------

   OTP-11919  crashdump_viewer would crash if the owner of a timer was
	      specified as the process' registered name. This has been
	      corrected.

   OTP-11949  Fix crash and minor updates.

--- reltool-0.6.6 -------------------------------------------------------

   OTP-11977  Fixed a minor typo in an error message from reltool_server.

--- ssh-3.0.3 -----------------------------------------------------------

   OTP-11883  Removed mail address from error reports and corrected
	      spelling error (Stacktace -> stacktrace)

   OTP-11885  Option max_sessions added to ssh:daemon/{2,3}. This option,
	      if set, limits the number of simultaneous connections
	      accepted by the daemon.

   OTP-11908  Fixed timeout bug in ssh:connect.

   OTP-11972  Accepts that some older OpenSSH clients sends incorrect
	      disconnect messages.

   OTP-11976  Handle inet and inet6 option correctly

   OTP-11983  Decode/encode fixes in SSH_MSG_IGNORE and
	      SSH_MSG_UNIMPLEMENTED.

--- ssl-5.3.5 -----------------------------------------------------------

   OTP-11874  Gracefully handle unknown alerts

	      Thanks to Atul Atri for reporting this issue

   OTP-11875  Gracefully ignore cipher suites sent by client not supported
	      by the SSL/TLS version that the client has negotiated.

	      Thanks to Danil Zagoskin for reporting this issue

   OTP-11878  ssl:recv now returns {error, einval} if applied to a non
	      passive socket, the same as gen_tcp:recv.

	      Thanks to Danil Zagoskin for reporting this issue

   OTP-11880  Gracefully handle structured garbage, i.e a client sends some
	      garbage in a ssl record instead of a valid fragment.

	      Thanks to Danil Zagoskin

   OTP-11886  Corrected handling of default values for signature_algorithms
	      extension in TLS-1.2 and corresponding values used in
	      previous versions that does not support this extension.

	      Thanks to Danil Zagoskin

   OTP-11890  Gracefully handle invalid alerts

   OTP-11897  Handle socket option inheritance when pooling of accept
	      sockets is used

   OTP-11912  Make sure that the list of versions, possibly supplied in the
	      versions option, is not order dependent.

	      Thanks to Ransom Richardson for reporting this issue

   OTP-11926  Reject connection if the next_protocol message is sent twice.

   OTP-11950  Correct options handling when ssl:ssl_accept/3 is called with
	      new ssl options after calling ssl:listen/2

   OTP-11966  Generalize handling of default ciphers

	      Thanks to Andreas Schultz

   OTP-11975  Make sure change cipher spec is correctly handled

--- stdlib-2.1 ----------------------------------------------------------

   OTP-11850  filelib:wildcard("broken_symlink") would return an empty list
	      if "broken_symlink" was a symlink that did not point to an
	      existing file.

   OTP-11854  erl_tar can now handle files names that contain Unicode
	      characters. See "UNICODE SUPPORT" in the documentation for
	      erl_tar.

	      When creating a tar file, erl_tar would sometime write a too
	      short end of tape marker. GNU tar would correctly extract
	      files from such tar file, but would complain about "A lone
	      zero block at...".

   OTP-11872  When redefining and exporting the type map() the Erlang Code
	      Linter (erl_lint) erroneously emitted an error. This bug has
	      been fixed.

   OTP-11888  The following native functions now bump an appropriate amount
	      of reductions and yield when out of reductions:

	      -- erlang:binary_to_list/1

	      -- erlang:binary_to_list/3

	      -- erlang:bitstring_to_list/1

	      -- erlang:list_to_binary/1

	      -- erlang:iolist_to_binary/1

	      -- erlang:list_to_bitstring/1

	      -- binary:list_to_bin/1

	      Characteristics impact:

	      -- Performance -- The functions converting from lists got a
	      performance loss for very small lists, and a performance gain
	      for very large lists.

	      -- Priority -- Previously a process executing one of these
	      functions effectively got an unfair priority boost. This
	      priority boost depended on the input size. The larger the
	      input was, the larger the priority boost got. This unfair
	      priority boost is now lost.

   OTP-11922  Fix evaluation of map updates in the debugger and erl_eval

	      Reported-by: José Valim

   OTP-11951  Add maps:get/3 to maps module. The function will return the
	      supplied default value if the key does not exist in the map.

--- syntax_tools-1.6.15 -------------------------------------------------

   OTP-11930  Fix reverting map in syntax_tools

	      There was a bug in erl_syntax when running e.g.
	      erl_syntax:revert_forms, affecting maps. Instead of getting
	      Key/Value you got Key/Key in the resulting abstract form.

--- test_server-3.7.1 ---------------------------------------------------

   OTP-11971  The mechanism for running code cover analysis with
	      common_test has been improved. Earlier, if a test run
	      consisted of multiple tests, cover would be started and
	      stopped for each test. This would give "intermediate" cover
	      logs available from the "Coverage log" link on the test suite
	      result pages. To accumulate cover data over all tests, the
	      'export' option had to be used in the cover spec file. This
	      was not well documented, and the functionality was quite
	      confusing.

	      Using the 'nodes' option in the cover spec file would fail
	      when the test run consisted of multiple tests, since the
	      specified nodes would only be included in the cover analysis
	      of the first test.

	      The repeated compilation and analysis of the same modules was
	      also very time consuming.

	      To overcome these problems, ct will now only cover compile
	      and analyze modules once per test run, i.e. once for each
	      cover spec file. The log file is available via a new button
	      on the top level index page. The old "Coverage log" links on
	      the test suite result pages still exist, but they all point
	      to the same log containing the accumulated result.

--- tools-2.6.15 --------------------------------------------------------

   OTP-11942  Removed erlang:bitstr_to_list/1 and erlang:list_to_bitstr/1.
	      They were added by mistake, and have always raised an
	      undefined exception when called.

--- typer-0.9.8 ---------------------------------------------------------

   OTP-11860  Added initial documentation framework for TypEr.

   OTP-11996  The name of a compiler option has been fixed in the Makefile.

--- wx-1.3 --------------------------------------------------------------

   OTP-11985  Fix delayed destroy for wxPaintDC objects which could cause
	      an eternal loop for modal dialogs.

	      Fix wxSL_LABELS compatibility between wxWidgets-2.8 and
	      wxWidgets-3.0 versions

   OTP-11986  Add missing classes wxPopup[Transient]Window, wxActivateEvent
	      and wxTextCtrl:changeValue/2 function.

--- Open Source Contributors --------------------------------------------

   Thanks to: Andreas Schultz, Anthony Ramine, Bernard Duggan, Colton, 
              Danil Zagoskin, Eiichi Tsukata, Erik Norgren, Jani Hakala, 
              José Valim, Kirill Zaborsky, Kostis Sagonas, Luca Favatella,
              Magnus Lång, Matwey V. Kornilov, Mikael Pettersson, Paul Guyot,
              Pierre Fenoll, Piotr Nosek, Roland Karlsson, Sergey Abramyan, 
              Sergey Sinkovskiy, Tobias Lindahl, Yifeng Xu, Yuki Ito