[tg] OpenBSD sync: handle integer base out of band like ksh93 does
[tg] Protect standard code (predefined aliases, internal code, aliases and functions in dot.mkshrc) from being overridden by aliases and, in some cases, shell functions (i.e. permit overriding but ignore it)
[tg] Implement GNU bash's enable for dot.mkshrc using magic aliases to redirect the builtins to external utilities; this differs from GNU bash in that enable takes precedence over functions
[tg] Move unaliasing an identifier when defining a POSIX-style function with the same name into lksh, as compatibility kludge
[tg] Korn shell style functions now have locally scoped shell options
[tg, iSKUNK] Change some ASCII-isms to be EBCDIC-aware or pluggable
[tg, Ypnose] Mention lksh build instructions on manpage and website
[tg] Overhaul signal handling; support new POSIX NSIG_MAX, add sysconf(_SC_NSIG) as a later TODO item
[tg] Fix signal bounds (1 <= signum < NSIG)
[tg] Improve manual pages, especially wrt. standards compliance
[tg, iSKUNK] Initial EBCDIC work for dot.mkshrc
[tg, iSKUNK] Add list of z/OS signals to Build.sh
[tg] Work around the sh(1) backslash-newline problem by moving the code triggering it out of *.opt and into the consumers
[colona] Bind another well-known ANSI Del key in the Emacs mode
[tg] Fix ${foo/*/x} pattern checks, spotted by izabera
[carstenh] Fix error output of cd function in dot.mkshrc
[tg] read partial returns in -N and timeout cases
[tg] Fix $LINENO inside PS1; spotted by carstenh
[tg] Ensure correct padding of at least 2 spaces in print_columns
[tg] Note issues with nested complex parameter expansions and follow-up bugfixes to expect
[OpenBSD] Some language fixes in documentation; comments
[tg] Reimplement multi-line command history (Debian #783978) + fixes
[Martijn Dekker] Fix command -v for "shell reserved words"
[tg] In dot.mkshrc make use of latest feature: local options
[tg] Fix ""$@ to emit a word
[tg] Change cat(1) hack to look first and not ignore builtin
[KO Myung-Hun] Begin porting mksh to OS/2
[komh, tg] Some generic minor bugfixes from OS/2 porting
[tg] Document mknod(8) isn’t normally part of mksh(1)
[tg] Quote arguments to : in build/test scripts as well
[tg] Add cat(1) hack for printf(1)-as-builtin: always prefer external
[tg] Explicitly use binary mode for any and all file I/O in stock mksh
[Ilya Zakharevich] Use termio, not termios(4), on OS/2
[tg] Set edchars to sane BSD defaults if any are NUL
[tg] Implement support for PC scancodes in Vi and Emacs editing mode
[komh] OS/2 uses ; as PATH separator plus support drive letters
Upstream changes:
R50f is a required security and bugfix release:
[tg] Add a patch marker for vendor patch versioning to mksh.1
[tg] SECURITY: make unset HISTFILE actually work
[tg] Document some more issues with the current history code
[tg] Remove some unused code
[tg] RCSID-only sync with OpenBSD, for bogus and irrelevant changes
[tg] Also disable field splitting for alias 'local=\typeset'
[tg] Fix read -n-1 to not be identical to read -N-1
[tg] Several fixes and improvements to lksh(1) and mksh(1) manpages
[tg] More code (int size_t), comment and testsuite fixes
[tg] Make dot.mkshrc more robust (LP#1441853)
[tg] Fix issues with IFS='\' read, found by edualbus
[enh, tg] Fix integer overflows related to file descriptor parsing, found by Pawel Wylecial (LP#1440685); reduce memory usage for I/O redirs
[tg] Document in the manpage how to set ±U according to the current locale settings via LANG/LC_* parameters (cf. Debian #782225)
[igli, tg] Some code cleanup and restructuring
[tg, oksh] Handle number parsing and storing more carefully
R50e is a required bugfix release:
[tg] Add more tests detailing behaviour difference from GNU bash
[tg] Introduce a memory leak for x=<< fixing use of freed memory instead, bug tracked as LP#1380389 still live
[tg] Add x+=<< parallel to x=<<
[tg, ormaaj, jilles] POSIX "command" loses builtin special-ness
[tg] Fix LP#1381965 and LP#1381993 (more field splitting)
[jilles] Update location of FreeBSD testsuite for test(1)
[Martin Natano] Remove dead NULL elements from Emacs keybindings
[tg, Stéphane Chazelas, Geoff Clare] Change several testcases for $*/$@ expansion with/without quotes to expected-fail, with even more to come ☹
[tg] Fix miscalculating required memory for encoding the double-quoted parts of a here document or here string delimiter, leading to a buffer overflow; discovered by zacts from IRC
[RT] Rename a function conflicting with a MacRelix system header
[tg] Use size_t (and ssize_t) consistently, stop using ptrdiff_t; fixes some arithmetics and S/390 bugs
[tg] Remove old workarounds for Clang 3.2 scan-build
[tg] Remove all Clang/Coverity assertions, making room for new checks
[tg] Fix NSIG generation on Debian sid gcc-snapshot
[tg] Make a testcase not fail in a corner case
[tg] Fix issues detected by GCC’s new sanitisers: data type of a value to be shifted constantly must be unsigned (what not, in C…); shebang check array accesses are always unsigned char
[tg] Be even more explicit wrt. POSIX in the manpage
[tg] Fix shebang / file magic decoding
[tg] More int → bool conversion
[tg] Let Build.sh be run by GNU bash 1.12.1 (Slackware 1.01)
[Stéphane Chazelas, tg] Fix here string parsing issue
[tg] Point out more future changes in the manpage
[tg] Call setgid(2), setegid(2), setuid(2) before seteuid(2)
[tg] Fix spurious empty line after ENOENT “whence -v”, found by Ypnose
[tg] Optimise dot.mkshrc and modernise it a bit
[tg] Use MAXPATHLEN from <sys/param.h> for PATH_MAX fallback
[tg] Some code cleanup and warnings fixes
[tg] Add options -a argv0 and -c to exec
[jsg] Prevent use-after-free when hitting multiple errors unwinding
[tg] Fix use of $* and $@ in scalar context: within [[ … ]] and after case (spotted by Stéphane Chazelas) and in here documents (spotted by tg@); fix here document expansion
[tg] Unbreak when $@ shares double quotes with others
[tg] Fix set -x in PS4 expansion infinite loop
R50d is a required bugfix release:
- [Goodbox] Fix NULL pointer dereference on “unset x; nameref x”
- [tg] Fix severe regression in field splitting (LP#1378208)
- [tg] Add a warning about not using tainted user input (including from
the environ(7)ment) in arithmetics, until Stéphane writes it up nicely
R50c is a security fix release:
- [tg] Know more rare signals when generating sys_signame[] replacement
- [tg] OpenBSD sync (mostly RCSID only)
- [tg] Document HISTSIZE limit; found by luigi_345 on IRC
- [zacts] Fix link to Debian .mkshrc
- [tg] Cease exporting $RANDOM (Debian #760857)
- [tg] Fix C99 compatibility
- [tg] Work around klibc bug causing a coredump (Debian #763842)
- [tg] Use issetugid(2) as additional check if we are FPRIVILEGED
- [tg] SECURITY: do not permit += from environment
- [tg] Fix more field splitting bugs reported by Stephane Chazelas and
mikeserv; document current status wrt. ambiguous ones as testcases too
Changelog:
R50b is a recommended bugfix release:
* [Ypnose] Fix operator description in the manpage
* [tg] Change all mention of “eglibc” to “glibc”, it is merged back
* [Colona] Fix rare infinite loop with invalid UTF-8 in the edit buffer
* [tg] Make more clear when a shell is interactive in the manpage
* [tg] Document that % is a symmetric remainder operation, and how to
get a mathematical modulus from it, in the manpage
* [tg, Christopher Ferris, Elliott Hughes] Make the cat(1) builtin also
interruptible in the write loop, not just in the read loop, and avoid
it getting SIGPIPE in the smores function in dot.mkshrc by terminating
cat upon user quit
* [tg] Make some comments match the code, after jaredy from obsd changed
IFS split handling
* [tg] Fix some IFS-related mistakes in the manual page
* [tg] Document another issue as known-to-fail test IFS-subst-3
* [tg] Improve check.pl output in some cases
* [tg, Jb_boin] Relax overzealous nameref RHS checks
R50 is a recommended bugfix release:
* [tg] Fix initial IFS whitespace not being ignored when expanding
* [tg] MKSH_BINSHREDUCED no longer mistakenly enables brace expansion
* [tg] Explain more clearly Vi input mode limitations in the manpage
* [tg] Improve error reporting of the check.pl script (which needs a
maintainer since I don’t speak any perl(1), really), for lewellyn
* [tg] Use $TMPDIR in test.sh for scratch space
* [tg, Polynomial-C] Check that the scratch space is not mounted noexec
* [pekster, jilles, tg] Use termcap(5) names, not terminfo(5) names, in
tput(1) examples, for improved portability (e.g. to MidnightBSD)
* [tg] Avoid C99 Undefined Behaviour in mirtoconf LFS test (inspired by
Debian #742780)
* [tg] Fix ${!foo} for when foo is unset
* [tg] Improve nameref error checking (LP#1277691)
* [tg] Fix readonly bypass found by Bert Münnich
* [Ryan Schmidt] Improved system reporting for Mac OS X
* [nDuff] Explain better [[ extglob handling in the manpage
* [tg] Remove arr=([index]=value) syntax due to regressions
* [tg] IFS-split arithmetic expansions as per POSIX 201x
* [OpenBSD] Add more detailed Authors section to manpage
* [tg] Fix set ±p issue for good: drop privs unless requested
* [tg] Improve signal handling and use a more canonical probing order
* [tg] Fix return values $? and ${PIPESTATUS[*]} interaction with set -o
pipefail and COMSUBs
* [enh] Detect ENOEXEC ELF files and use a less confusing error message
* [tg] Update to Unicode 7.0.0
* [tg] Shut up valgrind in the $RANDOM code
* [tg] Use -fstack-protector-strong in favour of -fstack-protector-all
* [tg] Fix access-after-free crash spotted by Enjolras via IRC
R49 is a recommended bugfix release:
- [tg] dot.mkshrc: fix two issues with the cd wrapper
- [tg] Unbreak set +p (wider issue still to be addressed)
- [Steffen Daode Nurpmeso] Use WCONTINUED with waitpid(2)
- [millert] Add proper suspend builtin handling tty(4) and setpgrp(2)
- [tg] Sanitise and slightly optimise control character handling
- [tg] Add O_BINARY to all open(2) calls for OS/2 kLIBC support
- [tg] Generate option strings for shell, set, ulimit at compile time
- [Steffen Daode Nurpmeso] Drop ISTRIP termios(4) mode
- [tg] Mention negative history numbers, octals in the manpage
- [tg] Make check.pl work with Perl < 5.6.1 again
- [tg] Detect getsid(2) and skip the oksh suspend builtin otherwise
- [tg] Document that set -o noclobber is unsafe for tempfiles
- [tg] Update to Unicode 6.3.0
- [RT] Restore some portability
- [tg] Fix parsing positional argument variable names
- [tg] Sprinkle a few __attribute__((__pure__)); fix warnings
- [tg] Fix build on OSX: always use our wcwidth code; only use our strlcpy(3)
code if the OE doesn’t provide one (prompted by jonthn on IRC)
- [tg] Optimise sh -c to exec even in MKSH_SMALL
- [tg] Use new BAFH for hashing
Changes:
R48b is a minor bugfix update:
[tg] Fix display issue with multi-line prompts and SIGWINCH
R48 is a small but important bugfix update:
[tg] dot.mkshrc: unbreak hd(1) function in UTF-8 mode
[Jens Staal, tg] Improve buildability on Plan 9 and support kencc
[tg] Clean up and improve build process and testsuite
[Michael Langguth] Add multi-layer ICO file from mksh/Win32
[tg, Steffen Daode Nurpmeso] Fix interactive shell exiting on ^C or
syntax error when the EXIT pseudo-signal trap was set (to anything)
[tg, Daode] Display longer command excerpts in job control
[tg] Rewrite Emacs mode display window sliding calculation code
[tg] dot.mkshrc: “doch” now keeps standard input
[tg] Reduce memory usage and improve comments and documentation
R47 is a bugfix everyone must upgrade to:
[tg] Do not accidentally remove lksh.1 for in-srcdir builds
[tg] Fix post-build non-‘-Q’ output for lksh
[tg] Silence some configure-time warnings for clang-3.2 and GCC
[tg] Prevent recursion loops for namerefs; found by ormaaj
[tg] Replace wcwidth code by mine based on Unicode 6.2.0
[tg, Alexander Polakov] Fix quoting in word part of ${var+word} etc.
when the expression is in a quoted brace or a here document
[tg] Fix some compiler warnings; improve sig{,handler}_t detection
[tg] Keep SIGCHLD blocked in some more semi-critical code paths
[tg] Fix uninitialised variable causing random nōn-numerical input to be
accepted and acted upon in the select built-in command
[tg] No longer chown(2)/chmod(2) the -T tty(4) argument
[tg] Don’t fork(2) if the -T tty(4) argument begins with ‘!’; eliminates
the need for things like oneit_line/cttyhack/etc. on Linux
[jca] Fix “for var in; do” to not be interpreted as “for var; do”
[tg] Use %zu for printing size_t (ipv %lu with casting around)
[tg] use ${SIZE-size} for lewellyn’s cross
[fgsch, espie, millert, tg] Write more testcases
[millert] POSIX specifies that for && and || lists, only the exit status
of the last command matters for “set -e”; fix and document
[millert] check.pl: Add -T flag to set the tmpdir; use mkstemp(3) and
mkdtemp(3) instead of $$ in /tmp for tempfiles
[jca] Make $(<nonexistent) behave like $(cat nonexistent)
[tg] Let shf_open return an errno; display why file wasn’t read
[tg] Finally decide on regression-39 desired outcome (sync with AT&T
ksh93 and GNU bash --posix as well as mksh behaviour)
[tg] Fix post{in,de}crement in not evaluated side of e.g. ternary operator (LP#1187729)
[tg] Fix “set -x” problems; add “set +o inherit-xtrace” (LP#1179287)
[tg] Simplify some code
[tg] Fix segfault related to mixing funsub/valsub and comsub
R46 delivers these changes:
[tg] dot.mkshrc: prevent lksh from running it
[tg] Add the lksh manual page to the mksh distribution
[tg] Make both lksh and mksh interpret numbers with a leading digit zero
(‘0’) as octal precisely iff “set -o posix” is active
[tg] Point out the octal digit and the integer arithmetic differences
from POSuX verbosely in the manual pages (point people who need octals
to “set -o posix” and who need longs to lksh) and elaborate on the
horrors of ISO C Undefined Behaviour which is allowed to delete all your
data
[tg] Unbreak “set -o” (list flags) in lksh on LP64 machines
[tg] Implement Emacs mode PgUp as Vi insert mode Cur↑ for Yofuh
[tg] Allow setting both “set -o sh” and “set -o posix”, if done in the
same command; shuffle around compatibility levels (mksh/lksh, with -o
sh, with -o posix) again; permit a /bin/sh to set either or both
[tg] Sync lksh manual page with the exact code ifdefs
[tg] Change more use of signed integer to use unsigned instead
[tg] Implement “set -o pipefail” like AT&T ksh93 and GNU bash do
[tg] dot.mkshrc: provide hd(1) in Pure mksh™ for fallback
[tg] Implement VALSUBs (value substitutions): ${|REPLY=foo;}
* [tg] Make “set -x” print the commands run in escaped form
* [tg] PS4 in dot.mkshrc is now timestamped
* [tg] The &> GNU bash I/O redir is no longer parsed in -o posix, -o sh modes,
lksh (breaks valid scripts)
* [tg] Implement ${ …;} more efficiently (deleted-open files)
* [tg] For shf, %#s (if you can get it past GCC’s printf format attribute)
calls print_value_quoted, ignoring field width and precision
* [tg] Catch “typeset =” (regression) with better error message
* [tg, Tonnerre Lombard] add “doch” alias to dot.mkshrc which just repeats the
last input line with sudo(8)
* [tg] Use unsigned integers for all calculations, to avoid ISO C “Undefined
Behaviour” (and implementation-defined behaviour) throughout (most of) the
code; emulate signed integer arithmetics using unsigned; not-lksh only
* [tg] Emulate signed modulo naïvely, for correct sign of the result
* [tg] Add <<< and >>> for ROL and ROR (rotate left and right, respectively)
operations, <<<= and >>> assignments; bitwise AND the RHS of a shift/rotate
op with 31 (not for lksh)
* [tg] Remove a warning by working around a workaround found in dietlibc which
works around a bug in broken software such as GNU tar (really!)
* [tg] Correct and simplify list and categorisation of built-in commands as
POSIX special and “everything else” plus a flag to keep assignments
* [tg] Handle ((foo)) as “let]” internally to avoid a conflict with
user-defined functions called let (LP#1156707)
* [tg] Clean up the code