Pike 7.4.28 Release Notes

Changes since Pike 7.4.20

This document outlines the changes between Pike 7.4.20 and 7.4.28.


  • Generation of LDSHARED bugfixed so that building of 3:rd party modules works.
  • Bugfixes to String.Buffer.`+ and String.Buffer.`+=.
  • Bugfix in String.Buffer wide string handling.
  • is_absolute_path can now handle empty strings.
  • Stdio.FakeFile works as Stdio.File when reading more than what is stored in the file.
  • Bugfix in Standards.EXIF for Nikon 990/D1 cameras.
  • The MIME module supports transport padding after delimiter.
  • Buffer overflow fixed in _Roxen.
  • Several iterator bugs fixed.
  • Array.lyskom_sort_func bug fixed.
  • Bug fixes in Microsoft Windows installation.
  • Made -e and --execute work on IRIX for large pids.
  • Fixed PSD decoding bug for images with small masks.
  • Bugfix for ID3v2 tag decoding.
  • Corrected Stdio.FakeFile API to be more like Stdio.File.
  • Bugfixes in Web.Crawler.
  • The fd flags are now cleared before calling callbacks on POLLERR and POLLHUP to prevent nonblocking I/O to hang on fds where errors have occured earlier.
  • Several minor stability fixes (use less stack, better argument checking, etc) in some functions.
  • The Foo::this implementation is reworked to work correctly with parent pointers through inherits.
  • Better object file dumping.
  • Removed an overoptimization that could cause some casts to disappear even when they might have effect.
  • Fixed a bug that caused has_index((<1>),1) to return 0.
  • Fixed a memory leak that appeared when doing `- or `& on a mapping or multiset.
  • Fixed a core dump when doing `[]= on a string with invalid index.
  • Fixed a bug that in rare cases would make identifiers disappear from programs.
  • Fixed a bug that could cause the parser to hang when a tag callback returned the empty string and there's a data callback registered.
  • Bugfix for handling of NUL in %{%} in sprintf.
  • Added kludge to avoid race condition in syslog(2) in glibc/linuxthreads.
  • Bugfix when iterators are used in foreach. They are now incremented after the loop instead of before it. This can have compatibility effects in code that uses iterators explicitly. E.g:
     String.Iterator iter = String.Iterator ("foo");
       foreach (iter; int ind; int val)
         werror ("%d %d\n", ind, iter->index());
    This will now write "0 0", "1 1", etc. In previous versions of 7.4 it wrote "0 1", "1 2", etc since the iterator has already been incremented to point to the next element.
  • Bugfixes in Calendar.Fraction, which prevously lost track of the fraction component in Fraction()->set_timezone() and always returned 0.0 in Fraction()->fraction_no().
  • Stdio.File()->grantpt() fixed to work with SysV systems.
  • New function Stdio.File()->openpt() to portably get a pty master for use with grantpt().