Pike 7.8.316 Release Notes

Changes since Pike 7.8.116 (initial 7.8 release):

General

  • Sql.pgsql

    Substantial documentation improvements.

  • Stdio.Fd_ref is deprecated and in the process of being eliminated.

    You have never used it before, so don't start using it now.

Bugfixes

  • Fixed bug in AGGR_ARR_EPILOGUE() (aka END_AGGREGATE_ARRAY())

    that caused the empty array to always be returned if there were no unaggregated elements on the stack at END_AGGREGATE_ARRAY. You are encouraged to upgrade just for this fix since the bug creates very rare but (seemingly) random occurances of empty arrays.

  • Fixed multiset_delete_node to work with destructed indices.

    This fixes occasional bugs in various functions when there are destructed objects in indices. You are encouraged to upgrade just for this fix since the bug creates (seemingly) random crashes that are hard to reproduce and track down.

  • Fixed overzealous filtering of the value returned from Stdio.File()->mode().

    This bug caused Stdio.nb_sendfile to always run in blocking mode. You are encouraged to upgrade just for this fix since the bug can cause supposedly nonblocking actions to block and hang the script.

  • Fixed bug in the Odbc module on WIN32

    where it would fail for some field-types with the error "22003:Numeric value out of range".

  • Sql.pgsql

    • Various small fixes and performance improvements.
    • Fixed fully transparent UTF8/Unicode/wide string/character set support.
    • Fixed formatting errors in error().

  • Fixed bug when seeking backwards in Gz.File.

  • Fixed bug in fd_stat on windows when used on a file system with a long name.

  • Fixed off-by-one bug in Stdio.Readline

    that caused a space in the last column to disappear instead of being converted to a linefeed when word wrapping is used.

  • Fix bug in FakeFile.read()

    Replaced the broken-in-multiple-ways implementation by something that actually works (hence the original enlightnening description: "fixed a bug", there is really no concise way to classify this level of brokenness).

  • Image.TIFF: Fixed memory leak on OOM.

  • Fixed crash bug in yyexplain_not_implements().

  • LysKOM.ProtocolTypes: Bugfix of LocalToGlobalBlock

  • Protected Pike_fatal() against the risk of hanging on mutexes.

  • Added 7.6 compat versions for RegGet{Value{,s},KeyNames}().

  • Fixed memory leak in Image.Colortable.

  • Parser.SGML: Reinstated the class as Parser.SGML().

    It inadvertedly became Parser.SGML()->SGML() in the move to a separate file. Parser.SGML.SGML is kept as a compatibility alias.

  • Added Pike 7.6 and earlier compat for store_constant(UNDEFINED).

  • Fixed race-condition causing "Lost track of child" on pikes compiled --without-threads.

  • Regexp.PCRE: Do not match the empty string past the end of the input.

  • Reduced the risk of throwing out-of-stack errors while formatting an out-of-stack backtrace.

  • Fixed bug that would cause sprintf's %nH to refuse all strings as too long for some values of "n" on some architectures.

  • Made Process.search_path() aware if Win32 and AmigaOS specifics.

  • Fixed bug in Protocols.HTTP.Query that dropped the last byte of a request if the server did not provide a Content-Length header.

  • Fixed bug in Protocols.HTTP.Query

    that dropped the first argument to the async_fetch() callbacks (ie the query object) in some circumstances.

  • Fixed bug in Protocols.HTTP.AsyncClient

    that made all data decoding fail.

  • Fixed fatal "Invalid formatting method: 'p' 0x70." in COM.

  • low_get_function_line() now knows about prototypes.

    Fixes [bug 4855] ("Bad offset" when generating backtrace).

  • Removed spurious call to the fail callback after a successful Protocols.HTTP.Query()->timed_async_fetch().

    Fixes [bug 4773].

  • Fixed issue where symbols could be hidden by a later inherit of the same, but protected, symbol.

  • Fixed NULL dereference on failure to resolve the function return type when functions are used as types.

Optimizations

  • Fixed Filesystem._Tar.ReadFile to not gobble the whole tar entries into memory at once.

  • Improve performance of get_cpu_time() on OS X

    by avoiding a kernel trap to get the ID of the underlying system thread.

  • Throttle calls to task_info() on OS X since they are quite expensive.

    This gives a significant performance boost (>10%) on CPU-intensive applications.

Extensions and New Functions

  • Added support for specifying modifiers via a mapping to '*' in sprintf().

    See the documentation for details. This support is detectable by checking for String.__HAVE_SPRINTF_STAR_MAPPING__

  • Added support for generating little-endian floats with %F in sprintf().

    This support is detectable by checking for String.__HAVE_SPRINTF_NEGATIVE_F__

  • Sql.Sql now supports NULL values for %s-parameters.

  • Timeout support in win32 threads.

  • Made FakeFile() support getchar/gets/unread.

  • Added option to chown and utime that makes it possible to change the symlink instead of the target of the link.

  • function_name() now knows how to adjust the names of named lambdas.

  • Changed handling of POLLHUP for poll devices,

    it is now signalled on all of the callbacks.

  • Updated timezone data to tzdata2009c.

  • Added some support for the TIMESTAMP and INTERVAL datatypes to

    Oracle module.

New modules / classes / methods added

  • Protocols.IPv6

    Helpers for IPv6 related things. This currently only contains tools to parse and normalize addresses. (Not much more is necessary since the usual I/O interfaces support IPv6 as-is.)

  • Added Filesystem._Tar.extract

    to be able to extract many/all files in a reasonably efficient way.

  • Added Parser.Tabular

    It provides a flexible yet concise record-description language to parse character/column/delimiter-organised records.

  • Calendar.YMD.http_time() that knows how to handle dates according to HTTP 1.1 (RFC 2616).

  • Added support for GTK2 get_window() and get_pixmap().

Building and installing

  • Use the #-character as prefix and suffix for placeholders in master.pike.in instead of the currency sign,

    to avoid 8-bit character encoding issues.

  • Improved support for version bumping via both Subversion and git.

  • A recent stable Pike (7.8.116+) is now required to do a "make export".

  • The win32 installer now removes the generated master.pike on uninstall.