mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
$ arch/*/bin/ksh -xc 'typeset -a a=(1 2 3); \ (typeset -A a; typeset -p a); typeset -p a' typeset -A a=() typeset -a a=(1 2 3) The associative array in the subshell is empty, so the conversion failed. So far, I have been unsuccessful at fixing this in the array and/or virtual subshell code (a patch that fixes it there would still be more than welcome). As usual, real subshells work correctly, so this commit adds another forking workaround. The use case is rare and specific enough that I have no performance concerns. src/cmd/ksh93/bltins/typeset.c: setall(): - Fork a virtual subshell if we're actually converting a variable to an associative array, i.e.: the NV_ARRAY (-A, associative array) attribute was passed, there are no assignments (sh.envlist is NULL), and the variable is not unset. src/cmd/ksh93/tests/arith.sh: - Fix the "Array subscript quoting test" tests that should not have been passing and that correctly failed after this fix; they used 'typeset -A' without an assignment in a subshell, assuming it was unset in the parent shell, which it wasn't. Resolves: https://github.com/ksh93/ksh/issues/409
46 lines
2.5 KiB
C
46 lines
2.5 KiB
C
/***********************************************************************
|
|
* *
|
|
* This software is part of the ast package *
|
|
* Copyright (c) 1982-2012 AT&T Intellectual Property *
|
|
* Copyright (c) 2020-2022 Contributors to ksh 93u+m *
|
|
* and is licensed under the *
|
|
* Eclipse Public License, Version 1.0 *
|
|
* by AT&T Intellectual Property *
|
|
* *
|
|
* A copy of the License is available at *
|
|
* http://www.eclipse.org/org/documents/epl-v10.html *
|
|
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
|
|
* *
|
|
* Information and Software Systems Research *
|
|
* AT&T Research *
|
|
* Florham Park NJ *
|
|
* *
|
|
* David Korn <dgk@research.att.com> *
|
|
* *
|
|
***********************************************************************/
|
|
|
|
#include <releaseflags.h>
|
|
|
|
#define SH_RELEASE_FORK "93u+m" /* only change if you develop a new ksh93 fork */
|
|
#define SH_RELEASE_SVER "1.0.0-beta.2" /* semantic version number: https://semver.org */
|
|
#define SH_RELEASE_DATE "2022-06-15" /* must be in this format for $((.sh.version)) */
|
|
#define SH_RELEASE_CPYR "(c) 2020-2022 Contributors to ksh " SH_RELEASE_FORK
|
|
|
|
/* Scripts sometimes field-split ${.sh.version}, so don't change amount of whitespace. */
|
|
/* Arithmetic $((.sh.version)) uses the last 10 chars, so the date must be at the end. */
|
|
#if _AST_release
|
|
# define SH_RELEASE SH_RELEASE_FORK "/" SH_RELEASE_SVER " " SH_RELEASE_DATE
|
|
#else
|
|
# ifdef _AST_git_commit
|
|
# define SH_RELEASE SH_RELEASE_FORK "/" SH_RELEASE_SVER "+" _AST_git_commit " " SH_RELEASE_DATE
|
|
# else
|
|
# define SH_RELEASE SH_RELEASE_FORK "/" SH_RELEASE_SVER "+dev " SH_RELEASE_DATE
|
|
# endif
|
|
#endif
|
|
|
|
/*
|
|
* For shcomp: the version number (0-255) for the binary bytecode header.
|
|
* Only increase very rarely, i.e.: if incompatible changes are made that
|
|
* cause bytecode from newer versions to fail on older versions of ksh.
|
|
*/
|
|
#define SHCOMP_HDR_VERSION 5
|