This bug was fixed in the package mksh - 39.3-1ubuntu1 --------------- mksh (39.3-1ubuntu1) lucid; urgency=low * Merge from Debian unstable. (Closes LP: #529559) New upstream version. (Closes LP: #355883) This integrates a workaround for a gcc bug. (cf. LP: #375604) Remaining Ubuntu changes: - debian/control, debian/rules: Exclude dietlibc on powerpc/ppc64 and sparc (cf. LP: #381332) - debian/README.Debian, debian/mksh.postinst: Hardcode installing mksh as /bin/sh to false (cf. LP: #348872) but retain debconf infrastructure so that, if set to true in old installations, it will correctly be removed on upgrade mksh (39.3-1) unstable; urgency=low * New upstream version R39c; shortened ChangeLog since R39: - [tg] Build system, code, docs and testsuite cleanup, also style(9) - [tg] Parse and evaluate ${parameter op word} correctly - [tg] Fix possible SIGSEGV in interactive mode bind builtin due to mis-optimisation of gcc combined with a bogus prototype; discovered by Grml.org's Frank Terbeck (ft), thanks! - [tg] Clean up some more strict *roff or compiler warnings: dashes, undefined macros; casting errors (constness, signedness, type width/class) and catch possibly unaligned pointer dereferences early; remove code/rodata redundancies, plug memory leaks - [smultron] Tweak the manual page: point out the word “colour” - [tg] Optimise dot.mkshrc DJB’s CDB hash implementations; add Bob Jenkins’ one-at-a-time hash (standard and leading-bit initialised); fix signedness in expressions; let the hashes use stdin if "$*" is empty, like Lb64{en,de}code; use “[[ -o utf8-mode ]]” ipv “[[ $- = *U* ]]” - [tg] Build.sh portability fixes: missing prerequisite headers; ensure $CC is never called without $CFLAGS; fix test.sh, et al. - [tg] Optimise internal variable representation; use one-at-a-time hash; cache hash values for faster resizing at zero memory cost; clean up hash table (keytab) code; switch hash table collision resolution algorithm to Python’s; prepare for later changes - [tg] Fix type errors in the source code (int → bool, size_t, mksh_uari_t) - [tg] Fix “${foo:bar:$baz}” not working (missing substitute() call) - [tg] Implement “typeset ±a” as nop - [tg] Support ksh93-like “${!foo[@]}” listing the keys (indicēs) of all set array elements - [tg] Support bash/ksh93-like “array=([key]=value …)” and (additionally) “set ±A array -- [key]=value …” to directly specify indicēs to use - [tg] Document the optional, unsupported, printf(1) builtin in TFM - [tg] Replace realpath(3) dependency and internally used get_phys_path() pdksh code with own implementation; always offer the realpath builtin - [tg] Implement nameref='typeset -n' (bounded variables) like AT&T ksh93 but with mksh-style nested/dynamic scoping and on-use resolving; they cannot currently be stored in an array though - [tg] Add “chdir” builtin doing the same as “cd” special builtin - [tg, David Korn] Document more differences between mksh (and pdksh) and AT&T ksh (or, more specific, ksh88, ksh93) in the manual page - [tg] Support “'a'” as an alternative to “1#a”, like ksh93 does - [tg] Add ksh’s “test -o ?foo”: true if “foo” is a valid shell option, where “foo” can be “xtrace” or “-x” or “+x” (these three are equivalent) - [tg] Support “$'…'” backslash-expanding single-quoted strings, as requested by David Korn, with almost the same syntax and semantics - [tg] Unify backslash expansion code (C style vs. print builtin) - [tg] Support “function stop () {” bashism - [tg] For several items in the source code that require order to be kept, provide from multiply-included header files; sort correctly - [tg] Get rid of unneeded FMONITOR (-m) for shells without job control; sync list of flags, comments and manpage with reality - [tg] If MKSH_SMALL, reduce size by removing editor functionality - [tg] Support VT100 emulator style {Ctrl,Alt}-CurLeft/Right keycode sequences with new vt100-hack emacs bind function (LP: #355883) - [cnuke, tg] Remove more, like GNU bash extensions, from MKSH_SMALL - [tg] Remove more functionality, such as Emacs command line editing mode bind key macros, and other extensions, from MKSH_SMALL to help floppies - [tg] Make forking and subshells less expensive wrt. random state - [tg] Build and source code fixes for / caught by SUNWcc, HP aCC, pcc, DEC ucode cc (MIPS), GCC, LLVM clang - [tg] Make undef/def MKSH_NOVI into 0/1 MKSH_S_NOVI build flag - [tg] Get rid of "U getenv" in nm output, we already import environ - [tg] Simplify $RANDOM handling: reads are now either arc4random(3) (if available: set +o arc4random is no longer possible) or an LCG; writes are arc4random_pushb(3) if available for explicit writes, arc4random_addrandom(3) otherwise, or another one-at-a-time hash feeding the LCG; furthermore, RANDOM is now always exported to and imported from (implicit read: no push to kernel done) the environment vector on startup and spawning - [tg] Document mksh does not exactly use OPTU-8/OPTU-16 in the manpage, as well as when characters, octets, or screen columns are used - [tg] Fix exit 127 on "mksh /tmp/horsies" ipv of 1 on ENOENT, #548744 - [Clint Adams] Fix typos in the testsuite - [tg, Clint Adams] Begin a shared testsuite for mksh and posh - [tg] Make 「((foo) || bar)」 and 「((foo) | (bar))」 work - [tg] Fix lazy evaluation of assignments by ternary operator, #445651 - [tg] Work around Cygwin bugs (quirks) hindering the testsuite - [tg] In FSH mode, “echo [-n] 'foo\x40bar'” shall not be expanded - [tg] Let set -- $(false); echo $? return 0 (POSIXly correct) in FSH mode, 1 (needed for getopt(1) support) otherwise - [tg] Changes of variables inside Bourne style POSIX functions indeed affect the current execution environment (of the function caller) - [tg] Fix getopts behaviour (sync with AT&T ksh93 not ksh88) - [tg] “eval $(false)” shall return 0 (Debian Closes: #550717) - [tg] Ensure that /* apo'strophes in comments */ work - [tg] Overhaul and simplify handling of (special) variables - [tg] Further reduce memory (code/data) and import footprint - [tg] Use functions without PATH_MAX limit on GNU/Hurd - [tg] Fix tab completing pathnames containing ‘:’, ‘=’, ‘$’ or ‘`’ - [tg] Support ‘-T ’ even if MKSH_SMALL and fix it - [tg] Remove "which" alias "whence -p" to allow "which -a" in dot.mkshrc and add more examples, some commented out - [tg] Fix print_columns() issue with displaying items where characters had differing number of octets and columns, and the off-by-one which had hidden this problem with 2-octet 1-column and 3-octet 2-column chars - [tg] Beautify the manpage in both AT&T nroff and GNU groff - [tg] Fix null-expansion of “${x%?}” if $x is unset - [tg] Make some globbing (${x%?}) operate on characters instead of octets; update manual page to reflect that others still do and remove wording that let people think we’d ever support POSuX character classes - [tg] New ${%foo} returning width of $foo in screen columns, or -1 if $foo contains an ASCII/latin1/Unicode C0/C1 control character - [tg] Fix subtle possible portability problem wrt. CHILD_MAX - [tg] Honour ±U on command line of an interactive shell - [tg] Fix dead stores and other bugs pointed out by the Clang static analyser; put assertions in places it has false positives - [tg] Plug uninitialised memory access and possible out-of-bounds read of a buffer caught by Valgrind; change one memcpy(3) to memmove(3) where srcbuf and dstbuf overlap; place (-DDEBUG) workaround for false positive - [tg] Rework __attribute__ compiler capability check - [tg] Apply errno save/restore related fix from (sync with) oksh - [tg] Build.sh: output message when switching from autoconfiguration to building / output generation (requested by Matt “lewellyn” Lewandowsky); use “conftest.c” ipv “scn.c” (to please ccache); ... - [tg] Allow “unset foo[*]” (keep attributes) and “typeset foo[*]” (for forward-compatibility; R39b it’s the same as “typeset foo”) - [tg] When persistent history is enabled (but not MKSH_SMALL) and used, intertwine the shells concurrently accessing $HISTFILE better ⇒ sync on empty or duplicate line as well (requested by Maximilian “mxey” Gaß) - [tg] Split off “set ±o posix” and “set ±o sh” again, to be somewhat more compatible to various old or vendor versions of pdksh and mksh: + MKSH_BINSHREDUCED sets FSH but not FPOSIX + MKSH_MIDNIGHTBSD01ASH_COMPAT depends on FSH but not FPOSIX + The echo built-in behaves the same for FPOSIX and FSH + File descriptors > 2 are not closed for both FPOSIX and FSH + Both “set -o posix” and “set -o sh” call “set +o braceexpand” + In contrast to R39 and below, the errorlevel of “set -- $(getopt ab:c "$@")” is now the same in ksh and FPOSIX mode (0) and only FSH will use the errorlevel of getopt (used to be the other way round) - [tg] Document some more shortcomings in the mksh(1) manual page - Contributed printf.c fixes: + [tg] Make printf(1) builtin use “$'…'” mode, like ksh93 + [tg] Fix const-cleanliness * Remove patches now integrated in upstream or no longer needed * Bump Standards-Version, no relevant change * Apply patches inside the top-level directory * debian/source/format: Enforce "1.0" manually, for now * debian/README.source: New, by zack's suggestion, to document some particulars of the source package and why I'm not using 3.0 yet * debian/README.Debian, debian/mksh.docs: New, document dash bug * debian/control: I'm sure we don't need to B-D on locales-all [m68k] * debian/control: tweak package short description to well-known text and sync long description with upstream's * debian/copyright: Update, sync with upstream * Rename build/ into builddir/ to avoid phony target vs pathname conflict in Makefile (debian/rules) * debian/rules: Ensure we use the C locale during build (especially for patch application collation order) * debian/mksh.examples, debian/rules: Split out dh_installexamples args * debian/rules: Update for R39c, printf.c.1.14 particulars * debian/rules: When building, try with -combine first but retry if it fails, like my OpenSuSE Buildservice packages do (cf. LP: #375604) * debian/control: Remove DMUA, I'm a DD now * debian/diffs/backport-fixes.diff: New, fixes not yet in R39c mksh (39.1-4) unstable; urgency=low * Update danish translation, Tak tazz * debian/diffs/backport-echo-noescapes.diff: new, backport fix for "echo [-n] 'foo\x40bar'" expanding even in sh mode * debian/diffs/*: refresh and bump version number * debian/control: Update and correct package description -- Thorsten Glaser