summaryrefslogtreecommitdiff
path: root/app-shells
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2024-08-27 12:00:02 +0100
committerV3n3RiX <venerix@koprulu.sector>2024-08-27 12:00:02 +0100
commit345c02ca33341652116ddec6705530223af2de85 (patch)
treebcb9923530ba0703557f280b0a2bd1343bae857c /app-shells
parentf300354de9fe5d997850456a9e1f400193e6544f (diff)
gentoo auto-resync : 27:08:2024 - 12:00:02
Diffstat (limited to 'app-shells')
-rw-r--r--app-shells/Manifest.gzbin10624 -> 10627 bytes
-rw-r--r--app-shells/bash/Manifest4
-rw-r--r--app-shells/bash/bash-5.1_p16-r6.ebuild332
-rw-r--r--app-shells/bash/bash-5.2_p32-r1.ebuild403
-rw-r--r--app-shells/bash/files/bash-5.2_p32-read-delimiter-in-invalid-mbchar.patch297
5 files changed, 702 insertions, 334 deletions
diff --git a/app-shells/Manifest.gz b/app-shells/Manifest.gz
index 625c8a8033af..35c87972831e 100644
--- a/app-shells/Manifest.gz
+++ b/app-shells/Manifest.gz
Binary files differ
diff --git a/app-shells/bash/Manifest b/app-shells/bash/Manifest
index e4ca2622913a..9d23fc45695b 100644
--- a/app-shells/bash/Manifest
+++ b/app-shells/bash/Manifest
@@ -6,6 +6,7 @@ AUX bash-5.2_p21-configure-strtold.patch 910 BLAKE2B 83ec6ff756543ee44c18902f2d3
AUX bash-5.2_p21-wpointer-to-int.patch 512 BLAKE2B 0c7f5eb5b697abf15c1d17888a973e44d0ead1f095778b41841a6a1937a5b9e7ce5fa6a05e4404504990b0a244fdecfc12ce7c33ee7d67b4c837435e9bfe2b57 SHA512 61bc7f96a1f3f782f0502c660f7578f4c97b3aae244c95ce3810815fcf9c81734cd19599dc9c8b0707d4f2bbb50497ef85c02e66fdd360d49befe0fed0ca4985
AUX bash-5.2_p26-memory-leaks.patch 4357 BLAKE2B 1b9f08054b28fa0e73b7b3d4da2674efd75b3ce11392a078d5072ba8e466f4a9c504892f9a1f2f62e4dc39b22050e68d42bcbae8ebe537df699d0c884c89a0b9 SHA512 ad30a74b7f4ecf5f7446867baf9b177fb1036e384b61a2ed73b121b17b7f686f9bdf9295c5c251b11d165f80e6110a2768257a2460c7e93abe78a5f763b972e8
AUX bash-5.2_p32-memory-leaks.patch 4293 BLAKE2B 80d035f494b59f2774a905dd68375b00b43c7ac296be35a87a1c830946c26d65d8bc54e82aca75e63b8d2c0c64109b8a331a92dca80ed5f32d8cbcda99f87f48 SHA512 5ae73c1bd1330b6dee1982630ff2b8fb26c788337ad2f46ff78f972134b2555eb502c0610738a9fde31f424966af1e60b473a337a437b76e12e1f841a90f4845
+AUX bash-5.2_p32-read-delimiter-in-invalid-mbchar.patch 7718 BLAKE2B ab7fe139630be59b26a72f92f22e4a2b556594d341d82b0f15f99880724f5ea5cfd912a8de6b6e1db902c14d65395c74a03379e3e01ce69bb4512c681518301d SHA512 95b6e1653853ff4a202c21385f246abc8e6b5ebbaf757646ff1b8338bf1e1874fab2f28650cc47a1b967022fbc74d1d81fa64f3e28fd7bfb07292cea568470bc
AUX bash_logout 205 BLAKE2B b8c0266c3d1e31a714304a2b3b33389f042ae5bd497379f9b15ce31d47d1e3da73ba6536023953b00efe27b687e2ff45d94e3f01a13acc824dc12e31552c5b94 SHA512 7234250c03fc920996a381f9daef9e2d8ab1e1a29acdebed6669d8e0fe1c872a7fa343adf7d9ddc81225b0cd9eb223ba7ad1ff42448aff057fc6d6baa8f04a7d
AUX bashrc 3494 BLAKE2B e9379c18fca85666cd347d1d8cf5c9859c5865ad7a3ded1ac5724bad6117924231e89dcc21f1a80931591e9a39c1acc3f7be8b2afe38986ea34b3b8fc12f5814 SHA512 a8fa416ab9265055e778fad3e4190ab5f57da0823c12d60a915bb77ba701fe93df8d16e041dd5747ed9db899a2516451b803db648aed0f85f0abb6d98c9414b8
AUX bashrc-r1 894 BLAKE2B ffaebc59c403b815df246342564e7d871f0c5eda437f7d63cef42ed2041912bd61722cab3034342fcb0336b48d9a14ada74052e52f02774695fc3e968c6feaae SHA512 82972cd0feede88c679fe8690da4884e8efa3decfc3bb72404fbd1129364f0092d2edfb1c6cc1f5adf783a6deca64a82c670a8b034ac0c3f85742a67306aa36b
@@ -38,7 +39,6 @@ DIST bash-5.0.tar.gz 10135110 BLAKE2B a6c4d79144aa0c0f4a9433d618085c0d46b792b1de
DIST bash-5.0_p18-patches.tar.xz 804 BLAKE2B 89e615a08920a4cfc90f72d125a8256275b0677fb2d7abf208ca90ac80471d5fbf7efb86c814b6ccbbc65772370ed8fe82b7cee9b247ec881c0b664dee152f72 SHA512 538f817867ff3613f2177f2e6d9fecc69057152ac9cf35a5a7448ddc83960b94bc8e8f2987226ba68d14de376127ee5cf6c83f5374b74feb14fa1c5aab6105c7
DIST bash-5.1.tar.gz 10458638 BLAKE2B 42059556694b604911b5b7936f94d42d8923f2931f3ebacefd95454274c7baadb1ec97629a524c1542e2e282dae66f1389334f8edc572ca8ee841cc3ac449ba7 SHA512 c44a0ce381469219548a3a27589af3fea4f22eda1ca4e9434b59fc16da81b471c29ce18e31590e0860a6a251a664b68c2b45e3a17d22cfc02799ffd9a208390c
DIST bash-5.1.tar.gz.sig 95 BLAKE2B ac9209d6a4ab4436c511a7a195594e9036d7d1aef7887972f61a0e97378a9685b882621d7f95f5326b155dc155c41635417ce2ca41ac6d0dda78bd293ea4249f SHA512 3966404c0f683c7ef214fcf283b551e5441af3897009f778308c2e34067d98d57c95561453416a54ca5b1daf9a1288dbf950fe3f13353703cead12f5eec5fad8
-DIST bash-5.1_p16-patches.tar.xz 388 BLAKE2B 1575d54d311872c7ca71e13711fa0f7e3534fca16fd9d1ca045b6c696c9ca56f6a0ed5023a05d847ab5ddbefc22b8ef2c2a681f09571520f0294d83b495f0015 SHA512 c85e5b83f6ee1a7345647fa937d9718cab13be1a65886755d26a78d21fea4246650c7441a34fd729212e220366985b410562002d74c02c18de7ef0469b409ac7
DIST bash-5.2.tar.gz 10950833 BLAKE2B 51b196e710794ebad8eac28c31c93eb99ac1a7db30919a13271e39e1cb66a0672f242df75fc7d71627ea873dfbce53ec35c0c56a71c5167143070a7811343fd9 SHA512 5647636223ba336bf33e0c65e516d8ebcf6932de8b44f37bc468eedb87579c628ad44213f78534beb10f47aebb9c6fa670cb0bed3b4e7717e5faf7e9a1ef81ae
DIST bash-5.2.tar.gz.sig 95 BLAKE2B 2991b7c46ef1cdca08062f419be47fca7551f4c5d9aad8a5c1da74974f5e7707d23914b4cecf9b6c9610471146b2c49b611bb62a5d974f1c37cceb77b719851c SHA512 a161664f124f906be32709f66702f8f780e6d52e558ea45e71ec60a959c9435ff68477ee65a0a9f6c0051d5592f5044fb3b410cf3cd3ae5a8a323789b01be258
DIST bash-5.3-alpha.tar.gz 11195025 BLAKE2B b3325f6927d7dde86aae165891317b972f0b9814e134676b3d7d3aea81ce4d4cad1a01f160e290352072153ad3568ee21701a35190ef5e6274b3c03fc95c8d42 SHA512 52354eb7cd71330192ec76fdda04bcacf758a312e89b45558db5f5345f19b0d8e54732049934958cf89786f5bd7c538d88859eb8d8d22dabfc9ec7305263d10e
@@ -471,9 +471,9 @@ EBUILD bash-4.3_p48-r2.ebuild 6358 BLAKE2B 532802911ced386ccff0594e5eee739d0d5eb
EBUILD bash-4.4_p23-r2.ebuild 6356 BLAKE2B 7501ac7628fcd2f35d9ca6c2153190d2524545f38a9eb793cd8b9d30ed5cb4ae11078cd7bc940fe3cda3f62797ed53de5ab82f726219c054cdc8779a011a8ea9 SHA512 9b9d12e1408944d18c698b0be9940618c059599138f10b20ed55dc69131aac900e3cae0e0b79a55e77d075f6a03c2970b6d22250afe5c7912c652800fe9a30ef
EBUILD bash-5.0_p18-r2.ebuild 7680 BLAKE2B 6a615f5ef093b32e85bfe8a0fd270d9c636c5d178ba518a8382e1ad5f0a2e128ad85fec1c8441c416c836bdf83ad5ad0e154f79792a908fd6a97ef23750b1800 SHA512 43a8e61a3b754c5ff25a4c7c6c62c07be626c0e9c1515fcfa8a15e25a3b0aff9fa4d00275c2d64bcb506417a7babb6ee120cde118fd7c9255fade7245adeaaae
EBUILD bash-5.1_p16-r13.ebuild 10298 BLAKE2B b3b7bc3a466859b81e86b2201de8cdb4860489130f9fdad706765fd831ef737653a02f87b695996911c81ae625bf316b48d8c7e77df716f7c599f1111afff26c SHA512 055daf893bb43c30261b7ecbaed645b72eb0c5029d24f2922f53c65989ae5f23b56057f60645b4065483d9bb7256ad861ac7992642c5632dbe8b64e77b7eff20
-EBUILD bash-5.1_p16-r6.ebuild 8999 BLAKE2B e9208661767c61fbd9b06a61111db58908897bdb2d722b7ccbe5d79cd6d2e2543b6c1c89688e62f51ecdb36f107e74727dc6985396a20d8db8682c9036a6db7d SHA512 3fa9c420bbbc154569eb2a9ebb96681b4f10bb6cdbec43608d171f1d9c46a169d7f6cf8b3f419ff395ebe5dee852fa8c46ccd74c10ee9f0f10a6a281da679f5d
EBUILD bash-5.2_p26-r6.ebuild 11693 BLAKE2B 7c95bd57481d0cc1c1765b1369178367e1fda1fea39da0e4bec48cd17a2feb21718551bc6b8750807c2f74d885e07eb337a3f11e4d9775dd4eba95191aa3ce51 SHA512 df4385c766d6db4183db901f363389c5ac6dbff09e131743db2439942b2fb43440b2a50e77233b5980509d02139eabd91a9083746cfd268eaf42a205ffdc9c30
EBUILD bash-5.2_p26-r8.ebuild 11730 BLAKE2B b685acc438968eedcdaf86a50a615e0aaf018c305a6e5efcc3e616c2c7fc4712e7d5378238b1db5b3f3fa929e01089a463c22e6a50086ae0407cf820e872f6e6 SHA512 505ba70c35ff4d0ee67143b0519175abaa4e20b9b16d417bac5666a5402364d452328ab5f83c9533074f63c68dfe7837af937f3e5222c2ddd237f0121f42c34a
+EBUILD bash-5.2_p32-r1.ebuild 11798 BLAKE2B 1c332ecbbd5a2d654579c1fc7eefb79ee4916a3ea91772cc410ac4da31c2ac192655741a4b83306d27d25bb3fcd46b00a167aa817fce7d24b51a6fb358c350b2 SHA512 a2092dd4fb5d1a3bd59ef5361e6b5ed7a669bac9a0ee3cfd4036e46e04443989b667c89f87e290400218cd1c1b1bb7552590f4fdaa24ad7596ed4938d308dbfc
EBUILD bash-5.2_p32.ebuild 11730 BLAKE2B f67b34c5c0ddcb80a06a60a96a20a74870d407d86fa7db14dbbe2996ee3d648309a1d58cf45b4fb0a4d80c50553f5de70eed12e417e59332e1d833dcfd3a22a1 SHA512 ea82beb82eaf10ad4fce14940f94a899f5618ad76291f71333c2d82bdc825a4ed8b348e241f2c0231d3b1c2e95d5d6280c30f24426d07a2f791576c4337a643a
EBUILD bash-5.3_alpha-r5.ebuild 11566 BLAKE2B ab99c9907fce433ca5f21140c311b693ecdf4e2bb5356e16d3dc13c986f6f32284f7121b07a17340fdf2890ac8108e6c3dab0bcb3446f66447f741fd5e50c342 SHA512 8706a6346161c7a3159593f9bfcae1bb16c08f22bff648b6580f33708246f3eee2f7f3cd97eca8fd315b7b8f7daf22fcd4b7814e536a9c34d211738cccd36918
EBUILD bash-5.3_alpha_p20240815.ebuild 12157 BLAKE2B 48f22b62b1bfd800c74cbdf16bb0f55dd424fcab854a43e38499f844e58c4d903826e30b38ffe6ade39b184ffa40ac58e128365ed9c4c513acfd60ad85f944a9 SHA512 264a338ed7236e18a9154237be2995678f8b7b65db966f89a39fbfb69795924f9e1d291193ac1a201c20af642585f3336834f102bc671d0f771fbfa4fc8af09c
diff --git a/app-shells/bash/bash-5.1_p16-r6.ebuild b/app-shells/bash/bash-5.1_p16-r6.ebuild
deleted file mode 100644
index 488dbff0dc94..000000000000
--- a/app-shells/bash/bash-5.1_p16-r6.ebuild
+++ /dev/null
@@ -1,332 +0,0 @@
-# Copyright 1999-2024 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/chetramey.asc
-inherit flag-o-matic toolchain-funcs prefix verify-sig
-
-# Uncomment if we have a patchset
-GENTOO_PATCH_DEV="sam"
-GENTOO_PATCH_VER="${PV}"
-
-# Official patchlevel
-# See ftp://ftp.cwru.edu/pub/bash/bash-5.1-patches/
-PLEVEL="${PV##*_p}"
-MY_PV="${PV/_p*}"
-MY_PV="${MY_PV/_/-}"
-MY_P="${PN}-${MY_PV}"
-MY_PATCHES=()
-
-is_release() {
- case ${PV} in
- *_alpha*|*_beta*|*_rc*)
- return 1
- ;;
- *)
- return 0
- ;;
- esac
-}
-
-[[ ${PV} != *_p* ]] && PLEVEL=0
-
-# The version of readline this bash normally ships with.
-READLINE_VER="8.1"
-
-DESCRIPTION="The standard GNU Bourne again shell"
-HOMEPAGE="https://tiswww.case.edu/php/chet/bash/bashtop.html"
-
-if is_release ; then
- SRC_URI="mirror://gnu/bash/${MY_P}.tar.gz"
- SRC_URI+=" verify-sig? ( mirror://gnu/bash/${MY_P}.tar.gz.sig )"
-
- if [[ ${PLEVEL} -gt 0 ]] ; then
- # bash-5.1 -> bash51
- my_p=${PN}$(ver_rs 1-2 '' $(ver_cut 1-2))
-
- patch_url=
- my_patch_index=
-
- upstream_url_base="mirror://gnu/bash"
- mirror_url_base="ftp://ftp.cwru.edu/pub/bash"
-
- for ((my_patch_index=1; my_patch_index <= ${PLEVEL} ; my_patch_index++)) ; do
- printf -v mangled_patch_ver ${my_p}-%03d ${my_patch_index}
- patch_url="${upstream_url_base}/${MY_P}-patches/${mangled_patch_ver}"
-
- SRC_URI+=" ${patch_url}"
- SRC_URI+=" verify-sig? ( ${patch_url}.sig )"
-
- # Add in the mirror URL too.
- SRC_URI+=" ${patch_url/${upstream_url_base}/${mirror_url_base}}"
- SRC_URI+=" verify-sig? ( ${patch_url/${upstream_url_base}/${mirror_url_base}}.sig )"
-
- MY_PATCHES+=( "${DISTDIR}"/${mangled_patch_ver} )
- done
-
- unset my_p patch_url my_patch_index upstream_url_base mirror_url_base
- fi
-else
- SRC_URI="ftp://ftp.cwru.edu/pub/bash/${MY_P}.tar.gz"
- SRC_URI+=" verify-sig? ( ftp://ftp.cwru.edu/pub/bash/${MY_P}.tar.gz.sig )"
-fi
-
-if [[ -n ${GENTOO_PATCH_VER} ]] ; then
- SRC_URI+=" https://dev.gentoo.org/~${GENTOO_PATCH_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${GENTOO_PATCH_VER}-patches.tar.xz"
-fi
-
-LICENSE="GPL-3"
-SLOT="0"
-[[ "${PV}" == *_rc* ]] || \
-KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
-IUSE="afs bashlogger examples mem-scramble +net nls plugins +readline"
-
-DEPEND="
- >=sys-libs/ncurses-5.2-r2:0=
- nls? ( virtual/libintl )
- readline? ( >=sys-libs/readline-${READLINE_VER}:0= )
-"
-RDEPEND="
- ${DEPEND}
-"
-# We only need bison (yacc) when the .y files get patched (bash42-005, bash51-011)
-BDEPEND="sys-devel/bison
- verify-sig? ( sec-keys/openpgp-keys-chetramey )"
-
-S="${WORKDIR}/${MY_P}"
-
-QA_CONFIG_IMPL_DECL_SKIP+=(
- # this is fixed in autoconf 2.71, used in bash 5.2. The check fails
- # regardless of GCC version. bug #916480
- makedev
-)
-
-PATCHES=(
- # Patches from Chet sent to bashbug ml
- "${WORKDIR}"/${PN}-${GENTOO_PATCH_VER}-patches/${PN}-5.0-syslog-history-extern.patch
-)
-
-pkg_setup() {
- # bug #7332
- if is-flag -malign-double ; then
- eerror "Detected bad CFLAGS '-malign-double'. Do not use this"
- eerror "as it breaks LFS (struct stat64) on x86."
- die "remove -malign-double from your CFLAGS mr ricer"
- fi
-
- if use bashlogger ; then
- ewarn "The logging patch should ONLY be used in restricted (i.e. honeypot) envs."
- ewarn "This will log ALL output you enter into the shell, you have been warned."
- fi
-}
-
-src_unpack() {
- if [[ ${PV} == 9999 ]] ; then
- git-r3_src_unpack
- else
- if use verify-sig ; then
- verify-sig_verify_detached "${DISTDIR}"/${MY_P}.tar.gz{,.sig}
-
- local patch
- for patch in "${MY_PATCHES[@]}" ; do
- verify-sig_verify_detached ${patch}{,.sig}
- done
- fi
-
- unpack ${MY_P}.tar.gz
-
- if [[ -n ${GENTOO_PATCH_VER} ]] ; then
- unpack ${PN}-${GENTOO_PATCH_VER}-patches.tar.xz
- fi
- fi
-}
-
-src_prepare() {
- # Include official patches
- [[ ${PLEVEL} -gt 0 ]] && eapply -p0 "${MY_PATCHES[@]}"
-
- # Clean out local libs so we know we use system ones w/releases.
- if is_release ; then
- rm -rf lib/{readline,termcap}/* || die
- touch lib/{readline,termcap}/Makefile.in || die # for config.status
- sed -ri -e 's:\$[{(](RL|HIST)_LIBSRC[)}]/[[:alpha:]_-]*\.h::g' Makefile.in || die
- fi
-
- # Prefixify hardcoded path names. No-op for non-prefix.
- hprefixify pathnames.h.in
-
- # Avoid regenerating docs after patches, bug #407985
- sed -i -r '/^(HS|RL)USER/s:=.*:=:' doc/Makefile.in || die
- touch -r . doc/* || die
-
- eapply -p0 "${PATCHES[@]}"
- eapply_user
-}
-
-src_configure() {
- # Upstream only test with Bison and require GNUisms like YYEOF and
- # YYERRCODE. The former at least may be in POSIX soon:
- # https://www.austingroupbugs.net/view.php?id=1269.
- # configure warns on use of non-Bison but doesn't abort. The result
- # may misbehave at runtime.
- unset YACC
-
- local myconf=(
- --disable-profiling
-
- # Force linking with system curses ... the bundled termcap lib
- # sucks bad compared to ncurses. For the most part, ncurses
- # is here because readline needs it. But bash itself calls
- # ncurses in one or two small places :(.
- --with-curses
-
- $(use_enable mem-scramble)
- $(use_enable net net-redirections)
- $(use_enable readline)
- $(use_enable readline bang-history)
- $(use_enable readline history)
- $(use_with afs)
- $(use_with mem-scramble bash-malloc)
- )
-
- # For descriptions of these, see config-top.h
- # bashrc/#26952 bash_logout/#90488 ssh/#24762 mktemp/#574426
- append-cppflags \
- -DDEFAULT_PATH_VALUE=\'\""${EPREFIX}"/usr/local/sbin:"${EPREFIX}"/usr/local/bin:"${EPREFIX}"/usr/sbin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/bin\"\' \
- -DSTANDARD_UTILS_PATH=\'\""${EPREFIX}"/bin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/usr/sbin\"\' \
- -DSYS_BASHRC=\'\""${EPREFIX}"/etc/bash/bashrc\"\' \
- -DSYS_BASH_LOGOUT=\'\""${EPREFIX}"/etc/bash/bash_logout\"\' \
- -DNON_INTERACTIVE_LOGIN_SHELLS \
- -DSSH_SOURCE_BASHRC \
- $(use bashlogger && echo -DSYSLOG_HISTORY)
-
- # Don't even think about building this statically without
- # reading bug #7714 first. If you still build it statically,
- # don't come crying to us with bugs ;).
- #use static && export LDFLAGS="${LDFLAGS} -static"
- use nls || myconf+=( --disable-nls )
-
- # Historically, we always used the builtin readline, but since
- # our handling of SONAME upgrades has gotten much more stable
- # in the PM (and the readline ebuild itself preserves the old
- # libs during upgrades), linking against the system copy should
- # be safe.
- # Exact cached version here doesn't really matter as long as it
- # is at least what's in the DEPEND up above.
- export ac_cv_rl_version=${READLINE_VER%%_*}
-
- if is_release ; then
- # Use system readline only with released versions.
- myconf+=( --with-installed-readline=. )
- fi
-
- if use plugins ; then
- append-ldflags -Wl,-rpath,"${EPREFIX}"/usr/$(get_libdir)/bash
- else
- # Disable the plugins logic by hand since bash doesn't
- # provide a way of doing it.
- export ac_cv_func_dl{close,open,sym}=no \
- ac_cv_lib_dl_dlopen=no ac_cv_header_dlfcn_h=no
-
- sed -i \
- -e '/LOCAL_LDFLAGS=/s:-rdynamic::' \
- configure || die
- fi
-
- # bug #444070
- tc-export AR
-
- econf "${myconf[@]}"
-}
-
-src_compile() {
- emake
-
- if use plugins ; then
- emake -C examples/loadables all others
- fi
-}
-
-src_install() {
- local d f
-
- default
-
- dodir /bin
- mv "${ED}"/usr/bin/bash "${ED}"/bin/ || die
- dosym bash /bin/rbash
-
- insinto /etc/bash
- doins "${FILESDIR}"/bash_logout
- doins "$(prefixify_ro "${FILESDIR}"/bashrc)"
-
- keepdir /etc/bash/bashrc.d
-
- insinto /etc/skel
- for f in bash{_logout,_profile,rc} ; do
- newins "${FILESDIR}"/dot-${f} .${f}
- done
-
- local sed_args=(
- -e 's:#GNU#@::'
- -e '/#@/d'
- )
-
- if ! use readline ; then
- # bug #432338
- sed_args+=(
- -e '/^shopt -s histappend/s:^:#:'
- -e 's:use_color=true:use_color=false:'
- )
- fi
-
- sed -i \
- "${sed_args[@]}" \
- "${ED}"/etc/skel/.bashrc \
- "${ED}"/etc/bash/bashrc || die
-
- if use plugins ; then
- exeinto /usr/$(get_libdir)/bash
- doexe $(echo examples/loadables/*.o | sed 's:\.o::g')
-
- insinto /usr/include/bash-plugins
- doins *.h builtins/*.h include/*.h lib/{glob/glob.h,tilde/tilde.h}
- fi
-
- if use examples ; then
- for d in examples/{functions,misc,scripts,startup-files} ; do
- exeinto /usr/share/doc/${PF}/${d}
- docinto ${d}
- for f in ${d}/* ; do
- if [[ ${f##*/} != PERMISSION ]] && [[ ${f##*/} != *README ]] ; then
- doexe ${f}
- else
- dodoc ${f}
- fi
- done
- done
- fi
-
- # Install bash_builtins.1 and rbash.1
- emake -C doc DESTDIR="${D}" install_builtins
- sed 's:bash\.1:man1/&:' doc/rbash.1 > "${T}"/rbash.1 || die
- doman "${T}"/rbash.1
-
- newdoc CWRU/changelog ChangeLog
- dosym bash.info /usr/share/info/bashref.info
-}
-
-pkg_preinst() {
- if [[ -e ${EROOT}/etc/bashrc ]] && [[ ! -d ${EROOT}/etc/bash ]] ; then
- mkdir -p "${EROOT}"/etc/bash
- mv -f "${EROOT}"/etc/bashrc "${EROOT}"/etc/bash/
- fi
-}
-
-pkg_postinst() {
- # If /bin/sh does not exist, provide it
- if [[ ! -e ${EROOT}/bin/sh ]] ; then
- ln -sf bash "${EROOT}"/bin/sh
- fi
-}
diff --git a/app-shells/bash/bash-5.2_p32-r1.ebuild b/app-shells/bash/bash-5.2_p32-r1.ebuild
new file mode 100644
index 000000000000..e84a17739b2c
--- /dev/null
+++ b/app-shells/bash/bash-5.2_p32-r1.ebuild
@@ -0,0 +1,403 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/chetramey.asc
+inherit flag-o-matic toolchain-funcs prefix verify-sig
+
+# Uncomment if we have a patchset.
+#GENTOO_PATCH_DEV="sam"
+#GENTOO_PATCH_VER="${PV}"
+
+MY_PV=${PV/_p*}
+MY_PV=${MY_PV/_/-}
+MY_P=${PN}-${MY_PV}
+MY_PATCHES=()
+
+# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/.
+case ${PV} in
+ *_p*)
+ PLEVEL=${PV##*_p}
+ ;;
+ 9999|*_alpha*|*_beta*|*_rc*)
+ # Set a negative patchlevel to indicate that it's a pre-release.
+ PLEVEL=-1
+ ;;
+ *)
+ PLEVEL=0
+esac
+
+# The version of readline this bash normally ships with. Note that we only use
+# the bundled copy of readline for pre-releases.
+READLINE_VER="8.2_p1"
+
+DESCRIPTION="The standard GNU Bourne again shell"
+HOMEPAGE="https://tiswww.case.edu/php/chet/bash/bashtop.html https://git.savannah.gnu.org/cgit/bash.git"
+
+if [[ ${PV} == 9999 ]]; then
+ EGIT_REPO_URI="https://git.savannah.gnu.org/git/bash.git"
+ EGIT_BRANCH=devel
+ inherit git-r3
+else
+ my_urls=( {'mirror://gnu/bash','ftp://ftp.cwru.edu/pub/bash'}/"${MY_P}.tar.gz" )
+
+ # bash-5.1 -> bash51
+ my_p=${PN}$(ver_cut 1-2) my_p=${my_p/.}
+
+ for (( my_patch_idx = 1; my_patch_idx <= PLEVEL; my_patch_idx++ )); do
+ printf -v my_patch_ver %s-%03d "${my_p}" "${my_patch_idx}"
+ my_urls+=( {'mirror://gnu/bash','ftp://ftp.cwru.edu/pub/bash'}/"${MY_P}-patches/${my_patch_ver}" )
+ MY_PATCHES+=( "${DISTDIR}/${my_patch_ver}" )
+ done
+
+ SRC_URI="${my_urls[*]} verify-sig? ( ${my_urls[*]/%/.sig} )"
+
+ unset -v my_urls my_p my_patch_idx my_patch_ver
+fi
+
+if [[ ${GENTOO_PATCH_VER} ]]; then
+ SRC_URI+=" https://dev.gentoo.org/~${GENTOO_PATCH_DEV:?}/distfiles/${CATEGORY}/${PN}/${PN}-${GENTOO_PATCH_VER:?}-patches.tar.xz"
+fi
+
+S=${WORKDIR}/${MY_P}
+
+LICENSE="GPL-3+"
+SLOT="0"
+if (( PLEVEL >= 0 )); then
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+fi
+IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline"
+
+DEPEND="
+ >=sys-libs/ncurses-5.2-r2:=
+ nls? ( virtual/libintl )
+"
+if (( PLEVEL >= 0 )); then
+ DEPEND+=" readline? ( >=sys-libs/readline-${READLINE_VER}:= )"
+fi
+RDEPEND="
+ ${DEPEND}
+"
+# We only need bison (yacc) when the .y files get patched (bash42-005, bash51-011).
+BDEPEND="
+ pgo? ( dev-util/gperf )
+ verify-sig? ( sec-keys/openpgp-keys-chetramey )
+"
+
+# EAPI 8 tries to append it but it doesn't exist here.
+QA_CONFIGURE_OPTIONS="--disable-static"
+
+PATCHES=(
+ #"${WORKDIR}"/${PN}-${GENTOO_PATCH_VER}/
+
+ # Patches to or from Chet, posted to the bug-bash mailing list.
+ "${FILESDIR}/${PN}-5.0-syslog-history-extern.patch"
+ "${FILESDIR}/${PN}-5.2_p15-random-ub.patch"
+ "${FILESDIR}/${PN}-5.2_p15-configure-clang16.patch"
+ "${FILESDIR}/${PN}-5.2_p21-wpointer-to-int.patch"
+ "${FILESDIR}/${PN}-5.2_p21-configure-strtold.patch"
+ "${FILESDIR}/${PN}-5.2_p32-memory-leaks.patch"
+ "${FILESDIR}/${PN}-5.2_p32-read-delimiter-in-invalid-mbchar.patch"
+)
+
+pkg_setup() {
+ # bug #7332
+ if is-flag -malign-double; then
+ eerror "Detected bad CFLAGS '-malign-double'. Do not use this"
+ eerror "as it breaks LFS (struct stat64) on x86."
+ die "remove -malign-double from your CFLAGS mr ricer"
+ fi
+
+ if use bashlogger; then
+ ewarn "The logging patch should ONLY be used in restricted (i.e. honeypot) envs."
+ ewarn "This will log ALL output you enter into the shell, you have been warned."
+ fi
+}
+
+src_unpack() {
+ local patch
+
+ if [[ ${PV} == 9999 ]]; then
+ git-r3_src_unpack
+ else
+ if use verify-sig; then
+ verify-sig_verify_detached "${DISTDIR}/${MY_P}.tar.gz"{,.sig}
+
+ for patch in "${MY_PATCHES[@]}"; do
+ verify-sig_verify_detached "${patch}"{,.sig}
+ done
+ fi
+
+ unpack "${MY_P}.tar.gz"
+
+ if [[ ${GENTOO_PATCH_VER} ]]; then
+ unpack "${PN}-${GENTOO_PATCH_VER}-patches.tar.xz"
+ fi
+ fi
+}
+
+src_prepare() {
+ # Include official patches.
+ (( PLEVEL > 0 )) && eapply -p0 "${MY_PATCHES[@]}"
+
+ # Clean out local libs so we know we use system ones w/releases. The
+ # touch utility is invoked for the benefit of config.status.
+ if (( PLEVEL >= 0 )); then
+ rm -rf lib/{readline,termcap}/* \
+ && touch lib/{readline,termcap}/Makefile.in \
+ && sed -i -E 's:\$[{(](RL|HIST)_LIBSRC[)}]/[[:alpha:]_-]*\.h::g' Makefile.in \
+ || die
+ fi
+
+ # Prefixify hardcoded path names. No-op for non-prefix.
+ hprefixify pathnames.h.in
+
+ # Avoid regenerating docs after patches, bug #407985.
+ sed -i -E '/^(HS|RL)USER/s:=.*:=:' doc/Makefile.in \
+ && touch -r . doc/* \
+ || die
+
+ # Sometimes hangs (more noticeable w/ pgo), bug #907403.
+ rm tests/run-jobs || die
+
+ eapply -p0 "${PATCHES[@]}"
+ eapply_user
+}
+
+src_configure() {
+ local -a myconf
+
+ # Upstream only test with Bison and require GNUisms like YYEOF and
+ # YYERRCODE. The former at least may be in POSIX soon:
+ # https://www.austingroupbugs.net/view.php?id=1269.
+ # configure warns on use of non-Bison but doesn't abort. The result
+ # may misbehave at runtime.
+ unset -v YACC
+
+ myconf=(
+ --disable-profiling
+
+ # Force linking with system curses ... the bundled termcap lib
+ # sucks bad compared to ncurses. For the most part, ncurses
+ # is here because readline needs it. But bash itself calls
+ # ncurses in one or two small places :(.
+ --with-curses
+
+ $(use_enable mem-scramble)
+ $(use_enable net net-redirections)
+ $(use_enable readline)
+ $(use_enable readline bang-history)
+ $(use_enable readline history)
+ $(use_with afs)
+ $(use_with mem-scramble bash-malloc)
+ )
+
+ # For descriptions of these, see config-top.h.
+ # bashrc/#26952 bash_logout/#90488 ssh/#24762 mktemp/#574426
+ append-cppflags \
+ -DDEFAULT_PATH_VALUE=\'\""${EPREFIX}"/usr/local/sbin:"${EPREFIX}"/usr/local/bin:"${EPREFIX}"/usr/sbin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/bin\"\' \
+ -DSTANDARD_UTILS_PATH=\'\""${EPREFIX}"/bin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/usr/sbin\"\' \
+ -DSYS_BASHRC=\'\""${EPREFIX}"/etc/bash/bashrc\"\' \
+ -DSYS_BASH_LOGOUT=\'\""${EPREFIX}"/etc/bash/bash_logout\"\' \
+ -DNON_INTERACTIVE_LOGIN_SHELLS \
+ -DSSH_SOURCE_BASHRC \
+ $(use bashlogger && echo -DSYSLOG_HISTORY)
+
+ use nls || myconf+=( --disable-nls )
+
+ if (( PLEVEL >= 0 )); then
+ # Historically, we always used the builtin readline, but since
+ # our handling of SONAME upgrades has gotten much more stable
+ # in the PM (and the readline ebuild itself preserves the old
+ # libs during upgrades), linking against the system copy should
+ # be safe.
+ # Exact cached version here doesn't really matter as long as it
+ # is at least what's in the DEPEND up above.
+ export ac_cv_rl_version=${READLINE_VER%%_*}
+
+ # Use system readline only with released versions.
+ myconf+=( --with-installed-readline=. )
+ fi
+
+ if use plugins; then
+ append-ldflags "-Wl,-rpath,${EPREFIX}/usr/$(get_libdir)/bash"
+ else
+ # Disable the plugins logic by hand since bash doesn't provide
+ # a way of doing it.
+ export ac_cv_func_dl{close,open,sym}=no \
+ ac_cv_lib_dl_dlopen=no ac_cv_header_dlfcn_h=no
+
+ sed -i -e '/LOCAL_LDFLAGS=/s:-rdynamic::' configure || die
+ fi
+
+ # bug #444070
+ tc-export AR
+
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ local -a pgo_generate_flags pgo_use_flags
+ local flag
+
+ # -fprofile-partial-training because upstream notes the test suite isn't
+ # super comprehensive.
+ # https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html#sec-gcc10-pgo
+ if use pgo; then
+ pgo_generate_flags=(
+ -fprofile-update=atomic
+ -fprofile-dir="${T}"/pgo
+ -fprofile-generate="${T}"/pgo
+ )
+ pgo_use_flags=(
+ -fprofile-use="${T}"/pgo
+ -fprofile-dir="${T}"/pgo
+ )
+ if flag=$(test-flags-CC -fprofile-partial-training); then
+ pgo_generate_flags+=( "${flag}" )
+ pgo_use_flags+=( "${flag}" )
+ fi
+ fi
+
+ emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}"
+ use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" all others
+
+ # Build Bash and run its tests to generate profiles.
+ if (( ${#pgo_generate_flags[@]} )); then
+ # Used in test suite.
+ unset -v A
+
+ emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" -k check
+
+ if tc-is-clang; then
+ llvm-profdata merge "${T}"/pgo --output="${T}"/pgo/default.profdata || die
+ fi
+
+ # Rebuild Bash using the profiling data we just generated.
+ emake clean
+ emake CFLAGS="${CFLAGS} ${pgo_use_flags[*]}"
+ use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_use_flags[*]}" all others
+ fi
+}
+
+src_test() {
+ # Used in test suite.
+ unset -v A
+
+ default
+}
+
+src_install() {
+ local d f
+
+ default
+
+ my_prefixify() {
+ while read -r; do
+ if [[ $REPLY == *$1* ]]; then
+ REPLY=${REPLY/"/etc/"/"${EPREFIX}/etc/"}
+ fi
+ printf '%s\n' "${REPLY}" || ! break
+ done < "$2" || die
+ }
+
+ dodir /bin
+ mv -- "${ED}"/usr/bin/bash "${ED}"/bin/ || die
+ dosym bash /bin/rbash
+
+ insinto /etc/bash
+ doins "${FILESDIR}"/bash_logout
+ my_prefixify bashrc.d "${FILESDIR}"/bashrc-r1 | newins - bashrc
+
+ insinto /etc/bash/bashrc.d
+ my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color.bash | newins - 10-gentoo-color.bash
+ newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r1.bash 10-gentoo-title.bash
+ if [[ ! ${EPREFIX} ]]; then
+ doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash
+ fi
+
+ insinto /etc/skel
+ for f in bash{_logout,_profile,rc}; do
+ newins "${FILESDIR}/dot-${f}" ".${f}"
+ done
+
+ if use plugins; then
+ exeinto "/usr/$(get_libdir)/bash"
+ set -- examples/loadables/*.o
+ doexe "${@%.o}"
+
+ insinto /usr/include/bash-plugins
+ doins *.h builtins/*.h include/*.h lib/{glob/glob.h,tilde/tilde.h}
+ fi
+
+ if use examples; then
+ for d in examples/{functions,misc,scripts,startup-files}; do
+ exeinto "/usr/share/doc/${PF}/${d}"
+ docinto "${d}"
+ for f in "${d}"/*; do
+ if [[ ${f##*/} != @(PERMISSION|*README) ]]; then
+ doexe "${f}"
+ else
+ dodoc "${f}"
+ fi
+ done
+ done
+ fi
+
+ # Install bash_builtins.1 and rbash.1.
+ emake -C doc DESTDIR="${D}" install_builtins
+ sed 's:bash\.1:man1/&:' doc/rbash.1 > "${T}"/rbash.1 || die
+ doman "${T}"/rbash.1
+
+ newdoc CWRU/changelog ChangeLog
+ dosym bash.info /usr/share/info/bashref.info
+}
+
+pkg_preinst() {
+ if [[ -e ${EROOT}/etc/bashrc ]] && [[ ! -d ${EROOT}/etc/bash ]]; then
+ mkdir -p -- "${EROOT}"/etc/bash \
+ && mv -f -- "${EROOT}"/etc/bashrc "${EROOT}"/etc/bash/ \
+ || die
+ fi
+}
+
+pkg_postinst() {
+ local old_ver
+
+ # If /bin/sh does not exist, provide it.
+ if [[ ! -e ${EROOT}/bin/sh ]]; then
+ ln -sf -- bash "${EROOT}"/bin/sh || die
+ fi
+
+ read -r old_ver <<<"${REPLACING_VERSIONS}"
+ if [[ ! $old_ver ]]; then
+ :
+ elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ return
+ fi
+
+ while read -r; do ewarn "${REPLY}"; done <<'EOF'
+Files under /etc/bash/bashrc.d must now have a suffix of .sh or .bash.
+
+Gentoo now defaults to defining PROMPT_COMMAND as an array. Depending on the
+characteristics of the operating environment, it may contain a command to set
+the terminal's window title. Those who were already choosing to customise the
+PROMPT_COMMAND variable are now advised to append their commands like so:
+
+PROMPT_COMMAND+=('custom command goes here')
+
+Gentoo no longer defaults to having bash set the window title in the case
+that the terminal is controlled by sshd(8), unless screen is launched on the
+remote side or the terminal reliably supports saving and restoring the title
+(as alacritty, foot and tmux do). Those wanting for the title to be set
+regardless may adjust ~/.bashrc - or create a custom /etc/bash/bashrc.d
+drop-in - to set PROMPT_COMMMAND like so:
+
+PROMPT_COMMAND=(genfun_set_win_title)
+
+Those who would prefer for bash never to interfere with the window title may
+now opt out of the default title setting behaviour, either with the "unset -v
+PROMPT_COMMAND" command or by re-defining PROMPT_COMMAND as desired.
+EOF
+}
diff --git a/app-shells/bash/files/bash-5.2_p32-read-delimiter-in-invalid-mbchar.patch b/app-shells/bash/files/bash-5.2_p32-read-delimiter-in-invalid-mbchar.patch
new file mode 100644
index 000000000000..832520c6e7ec
--- /dev/null
+++ b/app-shells/bash/files/bash-5.2_p32-read-delimiter-in-invalid-mbchar.patch
@@ -0,0 +1,297 @@
+From 0432ec33408ac124b620c44416c9c58f0c10b63b Mon Sep 17 00:00:00 2001
+From: Kerin Millar <kfm@plushkava.net>
+Date: Fri, 23 Aug 2024 04:14:36 +0100
+Subject: [PATCH] Backport fix for issue with read delimiter in invalid
+ mutibyte char
+
+This addresses a regression introduced by 5.0. Consider the following
+test case.
+
+for i in {194..245}; do printf -v o %o "$i"; printf "\\$o\\n"; done |
+while read -r; do declare -p REPLY; done
+
+BEFORE
+
+declare -- REPLY=$'\302\n\303\n\304\n\305\n\306\n\307\n\310\n\311\n\312\
+n\313\n\314\n\315\n\316\n\317\n\320\n\321\n\322\n\323\n\324\n\325\n\326\
+n\327\n\330\n\331\n\332\n\333\n\334\n\335\n\336\n\337\n\340\n\341\n\342\
+n\343\n\344\n\345\n\346\n\347\n\350\n\351\n\352\n\353\n\354\n\355\n\356\
+n\357\n\360\n\361\n\362\n\363\n\364\n\365'
+
+AFTER
+
+declare -- REPLY=$'\302'
+declare -- REPLY=$'\303'
+declare -- REPLY=$'\304'
+declare -- REPLY=$'\305'
+declare -- REPLY=$'\306'
+declare -- REPLY=$'\307'
+declare -- REPLY=$'\310'
+declare -- REPLY=$'\311'
+declare -- REPLY=$'\312'
+declare -- REPLY=$'\313'
+declare -- REPLY=$'\314'
+declare -- REPLY=$'\315'
+declare -- REPLY=$'\316'
+declare -- REPLY=$'\317'
+declare -- REPLY=$'\320'
+declare -- REPLY=$'\321'
+declare -- REPLY=$'\322'
+declare -- REPLY=$'\323'
+declare -- REPLY=$'\324'
+declare -- REPLY=$'\325'
+declare -- REPLY=$'\326'
+declare -- REPLY=$'\327'
+declare -- REPLY=$'\330'
+declare -- REPLY=$'\331'
+declare -- REPLY=$'\332'
+declare -- REPLY=$'\333'
+declare -- REPLY=$'\334'
+declare -- REPLY=$'\335'
+declare -- REPLY=$'\336'
+declare -- REPLY=$'\337'
+declare -- REPLY=$'\340'
+declare -- REPLY=$'\341'
+declare -- REPLY=$'\342'
+declare -- REPLY=$'\343'
+declare -- REPLY=$'\344'
+declare -- REPLY=$'\345'
+declare -- REPLY=$'\346'
+declare -- REPLY=$'\347'
+declare -- REPLY=$'\350'
+declare -- REPLY=$'\351'
+declare -- REPLY=$'\352'
+declare -- REPLY=$'\353'
+declare -- REPLY=$'\354'
+declare -- REPLY=$'\355'
+declare -- REPLY=$'\356'
+declare -- REPLY=$'\357'
+declare -- REPLY=$'\360'
+declare -- REPLY=$'\361'
+declare -- REPLY=$'\362'
+declare -- REPLY=$'\363'
+declare -- REPLY=$'\364'
+declare -- REPLY=$'\365'
+
+Signed-off-by: Kerin Millar <kfm@plushkava.net>
+---
+ builtins/read.def | 25 ++++++++++++----
+ externs.h | 1 +
+ lib/sh/zread.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 94 insertions(+), 6 deletions(-)
+
+diff --git builtins/read.def builtins/read.def
+index ddd91d32..53b4bd81 100644
+--- builtins/read.def
++++ builtins/read.def
+@@ -130,7 +130,7 @@ static void set_readline_timeout PARAMS((sh_timer *t, time_t, long));
+ #endif
+ static SHELL_VAR *bind_read_variable PARAMS((char *, char *, int));
+ #if defined (HANDLE_MULTIBYTE)
+-static int read_mbchar PARAMS((int, char *, int, int, int));
++static int read_mbchar PARAMS((int, char *, int, int, int, int));
+ #endif
+ static void ttyrestore PARAMS((struct ttsave *));
+
+@@ -806,7 +806,7 @@ add_char:
+ else
+ # endif
+ if (locale_utf8locale == 0 || ((c & 0x80) != 0))
+- i += read_mbchar (fd, input_string, i, c, unbuffered_read);
++ i += read_mbchar (fd, input_string, i, c, delim, unbuffered_read);
+ }
+ #endif
+
+@@ -1064,10 +1064,10 @@ bind_read_variable (name, value, flags)
+
+ #if defined (HANDLE_MULTIBYTE)
+ static int
+-read_mbchar (fd, string, ind, ch, unbuffered)
++read_mbchar (fd, string, ind, ch, delim, unbuffered)
+ int fd;
+ char *string;
+- int ind, ch, unbuffered;
++ int ind, ch, delim, unbuffered;
+ {
+ char mbchar[MB_LEN_MAX + 1];
+ int i, n, r;
+@@ -1101,8 +1101,21 @@ read_mbchar (fd, string, ind, ch, unbuffered)
+ mbchar[i++] = c;
+ continue;
+ }
+- else if (ret == (size_t)-1 || ret == (size_t)0 || ret > (size_t)0)
+- break;
++ else if (ret == (size_t)-1)
++ {
++ /* If we read a delimiter character that makes this an invalid
++ multibyte character, we can't just add it to the input string
++ and treat it as a byte. We need to push it back so a subsequent
++ zread will pick it up. */
++ if (c == delim)
++ {
++ zungetc (c);
++ mbchar[--i] = '\0'; /* unget the delimiter */
++ }
++ break; /* invalid multibyte character */
++ }
++ else if (ret == (size_t)0 || ret > (size_t)0)
++ break; /* valid multibyte character */
+ }
+
+ mbchar_return:
+diff --git externs.h externs.h
+index 931dba9c..1b70a13b 100644
+--- externs.h
++++ externs.h
+@@ -536,6 +536,7 @@ extern ssize_t zreadintr PARAMS((int, char *, size_t));
+ extern ssize_t zreadc PARAMS((int, char *));
+ extern ssize_t zreadcintr PARAMS((int, char *));
+ extern ssize_t zreadn PARAMS((int, char *, size_t));
++extern int zungetc PARAMS((int));
+ extern void zreset PARAMS((void));
+ extern void zsyncfd PARAMS((int));
+
+diff --git lib/sh/zread.c lib/sh/zread.c
+index dafb7f60..7cfbb288 100644
+--- lib/sh/zread.c
++++ lib/sh/zread.c
+@@ -41,6 +41,10 @@ extern int errno;
+ # define ZBUFSIZ 4096
+ #endif
+
++#ifndef EOF
++# define EOF -1
++#endif
++
+ extern int executing_builtin;
+
+ extern void check_signals_and_traps (void);
+@@ -48,6 +52,11 @@ extern void check_signals (void);
+ extern int signal_is_trapped (int);
+ extern int read_builtin_timeout (int);
+
++int zungetc (int);
++
++/* Provide one character of pushback whether we are using read or zread. */
++static int zpushedchar = -1;
++
+ /* Read LEN bytes from FD into BUF. Retry the read on EINTR. Any other
+ error causes the loop to break. */
+ ssize_t
+@@ -59,6 +68,15 @@ zread (fd, buf, len)
+ ssize_t r;
+
+ check_signals (); /* check for signals before a blocking read */
++
++ /* If we pushed a char back, return it immediately */
++ if (zpushedchar != -1)
++ {
++ *buf = (unsigned char)zpushedchar;
++ zpushedchar = -1;
++ return 1;
++ }
++
+ /* should generalize into a mechanism where different parts of the shell can
+ `register' timeouts and have them checked here. */
+ while (((r = read_builtin_timeout (fd)) < 0 || (r = read (fd, buf, len)) < 0) &&
+@@ -95,6 +113,14 @@ zreadretry (fd, buf, len)
+ ssize_t r;
+ int nintr;
+
++ /* If we pushed a char back, return it immediately */
++ if (zpushedchar != -1)
++ {
++ *buf = (unsigned char)zpushedchar;
++ zpushedchar = -1;
++ return 1;
++ }
++
+ for (nintr = 0; ; )
+ {
+ r = read (fd, buf, len);
+@@ -118,6 +144,15 @@ zreadintr (fd, buf, len)
+ size_t len;
+ {
+ check_signals ();
++
++ /* If we pushed a char back, return it immediately */
++ if (zpushedchar != -1)
++ {
++ *buf = (unsigned char)zpushedchar;
++ zpushedchar = -1;
++ return 1;
++ }
++
+ return (read (fd, buf, len));
+ }
+
+@@ -135,6 +170,14 @@ zreadc (fd, cp)
+ {
+ ssize_t nr;
+
++ /* If we pushed a char back, return it immediately */
++ if (zpushedchar != -1 && cp)
++ {
++ *cp = (unsigned char)zpushedchar;
++ zpushedchar = -1;
++ return 1;
++ }
++
+ if (lind == lused || lused == 0)
+ {
+ nr = zread (fd, lbuf, sizeof (lbuf));
+@@ -160,6 +203,14 @@ zreadcintr (fd, cp)
+ {
+ ssize_t nr;
+
++ /* If we pushed a char back, return it immediately */
++ if (zpushedchar != -1 && cp)
++ {
++ *cp = (unsigned char)zpushedchar;
++ zpushedchar = -1;
++ return 1;
++ }
++
+ if (lind == lused || lused == 0)
+ {
+ nr = zreadintr (fd, lbuf, sizeof (lbuf));
+@@ -186,6 +237,13 @@ zreadn (fd, cp, len)
+ {
+ ssize_t nr;
+
++ if (zpushedchar != -1 && cp)
++ {
++ *cp = zpushedchar;
++ zpushedchar = -1;
++ return 1;
++ }
++
+ if (lind == lused || lused == 0)
+ {
+ if (len > sizeof (lbuf))
+@@ -204,6 +262,22 @@ zreadn (fd, cp, len)
+ return 1;
+ }
+
++int
++zungetc (c)
++ int c;
++{
++ if (zpushedchar == -1)
++ {
++ zpushedchar = c;
++ return c;
++ }
++
++ if (c == EOF || lind == 0)
++ return (EOF);
++ lbuf[--lind] = c; /* XXX */
++ return c;
++}
++
+ void
+ zreset ()
+ {
+--
+2.45.2
+