diff options
author | V3n3RiX <venerix@koprulu.sector> | 2025-05-02 12:56:08 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2025-05-02 12:56:08 +0100 |
commit | c19fd4a8a0e61cf71603721d947f7d15e3bffbc1 (patch) | |
tree | b9740599522e2b0dc811c425ecb99a59b95f47de /app-shells/bash | |
parent | 5206bf55974c896586eebb7c6e8039a61af3af0e (diff) |
gentoo auto-resync : 02:05:2025 - 12:56:08edge
Diffstat (limited to 'app-shells/bash')
9 files changed, 1084 insertions, 6 deletions
diff --git a/app-shells/bash/Manifest b/app-shells/bash/Manifest index 0b30b5dfa8c7..37eb47465292 100644 --- a/app-shells/bash/Manifest +++ b/app-shells/bash/Manifest @@ -3,13 +3,18 @@ AUX bash-5.1_p16-configure-clang16.patch 1108 BLAKE2B c3b2e0f74fdf83f8670b3f6e60 AUX bash-5.2_p15-configure-clang16.patch 1116 BLAKE2B 5ef332cd2847f46e351e5db6dda79d01d9853f5eda9762deeba0450c2bd400eec549bbb85696777b687f64d0977daac4883d6ce3f1e26cec0d5f73e8ee97f000 SHA512 8cc761a50e936bb602c14fcf047e7278fa2f5394f78fc7f0f0b9ae9df4b48bdc9ca8424ccd6f6422364b7132c3317b8e688f330ce60a0c4724046144c58bd3e5 AUX bash-5.2_p15-random-ub.patch 451 BLAKE2B adab09c3f2ce3697e3659e01266120155714b80263bd125808edf556a354291af615540189553b1c32a2d462ac41e28a9df8fb9f7d963a3ca3629d297a46e62d SHA512 ac62d3bd609a5d17434cb3614c3ee229569a84087173ebf694eb144a43891fdaead7c531f034b47d72c801ba46d48b0db616e3dcaec82bd7151df518ef070400 AUX bash-5.2_p21-wpointer-to-int.patch 512 BLAKE2B 0c7f5eb5b697abf15c1d17888a973e44d0ead1f095778b41841a6a1937a5b9e7ce5fa6a05e4404504990b0a244fdecfc12ce7c33ee7d67b4c837435e9bfe2b57 SHA512 61bc7f96a1f3f782f0502c660f7578f4c97b3aae244c95ce3810815fcf9c81734cd19599dc9c8b0707d4f2bbb50497ef85c02e66fdd360d49befe0fed0ca4985 +AUX bash-5.2_p32-erroneous-delimiter-pushback-condition.patch 2629 BLAKE2B db1a2a7bc82e3e5dd8478ab5c52e7c630bf818ee9e09f6df34c34091426da21b5bb1727c892084a0b49733ad4be699d51c164019e7f87c6a67406553061509d9 SHA512 595d3df551fe52eb6a876a4ca0c1ab3ba3c04e0c6741248b7c9bc4abb4c0b9d32257ee29dead79f21b9eb22109814ac470683021cd0ab953b34a9cb90a05400d +AUX bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch 8760 BLAKE2B c6e48a37c88ab4d361eab3c375de13d837b79755b53cb46aea2f16ce664d6dfd024c2fdb228031e74444891ac70806f0851863fdce02b5dd28f6e7e447137fb7 SHA512 0ff97fcdbcb8531b0dd552bda2a6776a3dcc42fdef74c2fe536f6f2df48f9a653a3de217e32c724be0e7a8a1cda4a34002681d27ea0c193076b3ca45f8d3649c +AUX bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-2.patch 4392 BLAKE2B c838aa2e64342ad975fd2e1782f0026ba36011996cfd080b013aec820eb5f5770e5b9b4b9149677c6d78182cd0498f229207e0ce120f998a15f6f638e1b57d0b SHA512 fa87ef3320e0cb3604eac401c976ada4fc79116bbaae1f0280e61aaea7b0d16347bfeac62c43121eef71a1d9aedfa4baa08870abc931724d130e9b7977cae4bd 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 +AUX bashrc.d/10-gentoo-color-r1.bash 2397 BLAKE2B 13dd2a2d5ab97ec9b31e0c7bd847ee248796ff31a3b7cbf3a436bea99a9d6530019a46baecad16927e2aad85be086d38b61dd100fc2cac5ae78c432546fc4fdb SHA512 ac8b497ef87070eacee63a2dbb5b4e0031f6aa7bcc157aef48d51147b965bafa8fbb1e3b850ddaad507409f5792cab688616d131cd1163ac5b260dd37e7446cd AUX bashrc.d/10-gentoo-color.bash 2209 BLAKE2B 8f01349bcb9814fc371debdda7bc6158a51b285938426fef5f6427ed40df0ae480c3d5318df30f72bf854c07e0da619d3e2cdb46927cbfdc58d3eb8cb3a305ba SHA512 697cb742378f8fbe6073e8457cc92d83b21606fe45b2779436bc6a874847cef80168d84c413d8c04b0062840e8720967d94877839599ea819d7547afc891934c AUX bashrc.d/10-gentoo-title-r1.bash 3148 BLAKE2B 7a065563389aab96100fdeea8c85e2634e137b85c483802cfb445f1d225efbdfa270e586e999ae753529378727f6e7095f60555e462769a83c498ef06b326e52 SHA512 ce033aa442248c5c15460a9da1b98fba5fed03c07e9f34a0a66aa0dd2ce7e519325254dee07f6652d369c11375577059b5b47132b74ad142f77dbd5b22bdf304 +AUX bashrc.d/10-gentoo-title-r2.bash 3171 BLAKE2B b6ff2a04d0ca39dcbfd623ee6746e1267ae776d5485d6e31e4baf4e575832ae73d2216af1eb03bd81a3047ad92083a9a7f5948ffe9e3ae8e1795a7b5d788729b SHA512 4c7600d5286b7a87326b994062146fc50fd0efb821dc4628a3677148fc99981e49fd3c0c9bbe458258849498cfdf082e8b2be5c492586ae758f0a1c8f3e30ab9 AUX bashrc.d/10-gentoo-title.bash 1970 BLAKE2B 4a54dbc7a9ab6a7be7f62e082c1a218e62d74cebdc7785a7e9fbc0713dfa4594209522c4097a1ff54f4fd56c1b16a17a6282163db6bd9240250d51a890beb877 SHA512 56d4517fb908b86d7de83ee354883890d580b74bf54931b56b399372f5e02020dcb54d5a7511979fe3deb5aaa9fea39ac1d7e9c85e8ba7847de5f6a0d75fd44a AUX bashrc.d/15-gentoo-bashrc-check.bash 1002 BLAKE2B b104e871329de47ac82941ca7ff9b03e2e66779603145dcae103052344b207306438cd3023d36255aca2b5fe53a7dc48d42e06e7e1d764ab0ad420b29c2e1650 SHA512 9134a27e234fe2ec0c27f99c83a9a8ac2b3209c766cb7ffbee47dac4c378178844c2c66851b8b114f43e1b4d9790e21121c33ba48cac1bc0a8f2ca06fe841d80 AUX dot-bash_logout 127 BLAKE2B 8290778aea3426f4c56e5a9e7328faa76f99001fc7ce3eeb3ec26624edcd918d7e946da9a63ffcd0cf0f739b528ccb9e764d448276fe4344b69ef2036fdd9921 SHA512 e0248b5087656a4dd3a4790ed8e6101866b922ccab36b510b3bf408dc0c583e70f323fbad0392e4ea6ca5dcbe73568733e0c0aa9c8ce6b00ff5f72bf3e9fd8fd @@ -480,11 +485,12 @@ EBUILD bash-4.3_p48-r2.ebuild 6485 BLAKE2B b4d6713527bc4b18aec27d001543b967030e4 EBUILD bash-4.4_p23-r2.ebuild 6483 BLAKE2B 20f9cc2edee161f4d43cbcb556ff363187ffcef3f2460717228ab040c53c778d275133e9db2139facedce13e8f539bdfe3128e55123a20e5a3dea852e982f949 SHA512 ab969f429bfbd4f410e65e081367f3f110053c28dc1f8690960f6966d59b6d34f04bb78a2291c9daffb034670478b7d827728753a5dc106146840558168f8a1d EBUILD bash-5.0_p18-r3.ebuild 6559 BLAKE2B c264bd72d3e69d1fda3bb9fb15ea331269dcd2c0fb0bf6c7c70abe636441183604323259dc4ec1cc7905c411d4d6d26d7cb6ecea76b1ffb8b8bd5b9f1dfd1d3f SHA512 374d9bca14a7e4bd69543810421dcb9be53ec6fbdc7cae5d8814e55ec1a954811a2a281ec5e47f51773a799be73d7ef96e226bbf75ed865a32393d9946e17e40 EBUILD bash-5.1_p16-r14.ebuild 7505 BLAKE2B f294e53426c8b2bc69f7e53ae0d68aafcfcc965474c971c03235b6a80f45f65f0166b970952a0dddd974e1667a9a6feb54f89c520d745f9e1377a6a7e14d0a81 SHA512 2822edee1a804a6035c650e3ef678471a8de58ad2180193dc4ed5f55bd993c6a24efe9ba1629a25d89f391bbc5cd96675367bf562ddcd4812faca3e4d5a2f7fa +EBUILD bash-5.2_p37-r1.ebuild 12049 BLAKE2B 625c22d0e9435345c9be6b5ab58f3c966f355abe4c30ee9e3833cc7a8dfba158c33e918e945f4f0a8389d62f432cb5c4de9686c00fa5588b832e67a39f94c6c5 SHA512 25ead09d5ba109d7b2f133b9a396480eca3c67a58113f68b3406834b96150284582cfbcf959d9d42bec33166937ca36b17d6c205477ed384e8de9de6b003639d EBUILD bash-5.2_p37.ebuild 11864 BLAKE2B fbc51a614a3cd31d434e578600c4b4183520e008ccd005fd5edecbe6272d01264e0612a45f6537d994f057572e78bbf68fcd2dc3832f6b9d7650236a4eb856c2 SHA512 148edbf2b3479f3b70238fa182075db8a65dc364e7627498e11ad52b9fc073b36e8a570b0321106835b690902a6ceecbd8b2064ef6f82dae5c3cdf4c2b6bbcd0 EBUILD bash-5.3_rc1.ebuild 12242 BLAKE2B f58b81ab5d8b149052f3a9ce22709716b3adb118e86216a4597df24a4dd734b4f7975427ea23a381d7b4af73e1df8fc168b466e192e60fbabbf5dbb79c311063 SHA512 52f23de08cfc9bb96e5117cbdf6e63c38095025908e9ffd4e830737056dc053d97f13d8f9ff5d6ffd73803a19cfc7bbb30292c17dc23e7c00dfe7c538d4dcb76 EBUILD bash-5.3_rc1_p20250409.ebuild 12242 BLAKE2B a3e70a3c8f05cfb9d521c313b5afe727c7cb7dbb54a7f640c6de0bcba91c8b4b85d663ed0273884f52a8a9c9f01aa65898cf846223e508d35fb14e250447bfd1 SHA512 3548cb03f6710f306a749df183ab9775830539ce6f5547ac40f184fe70c2fc5b9a1602b96a6c0ec42e6926d3d302b7cc9b496e569f793e111890cf3053a179ac EBUILD bash-5.3_rc1_p20250419.ebuild 12242 BLAKE2B cb23971d8039b70255da3f8161076bca0c98bd366799cbea4fde61ac1551535907facbea3c8d48c3a8849dda678dd2f34fc4bb731f119529c1d4c7f2ab40cf50 SHA512 48bdf1c544acc0f4f57616bcf32e728e01567342977074ad7826f4792bf718d5f9c4649859cee6d240e28d451502f88c5a0c43f8fb583cd2f3fd9d55cd62a730 EBUILD bash-5.3_rc1_p20250422.ebuild 12242 BLAKE2B 67a77ea455bab8a88b9e57bbd5075374a37d5fd8a8f8f8ab1f067ceaac93683103f0ee41b97950a9e50c0d0f7ee64ed9beb875a595e986185d2133772a349901 SHA512 9cae0950e2adf2534982ef04d36a067b1bfe3a5ad0907c78b7bb8d20d51ff83c79dff287c5b5d50a1bcdd61b48c3c67a91e3ce17b9f6ed93175f438653e4e439 -EBUILD bash-5.3_rc1_p20250430.ebuild 12242 BLAKE2B 9bc84f76b3c8d6de060107501947afffc78e9c930a48a51e02a39c2739e26e19dd00614c9c729adea31967931ae764efabf5386ba4481e8a20c8f3b2e6671506 SHA512 b0c9dab63ad526c7d96ef35cdaa62e912d5afd722b699fe3b9a447fceca31ce83b77487847b9086093e251d3751b250ee3fc7ed15b0ed22365be37589c07277f -EBUILD bash-9999.ebuild 12038 BLAKE2B f9460ae9aed945ed02ea4e7e53f5ea9e74d5acd466694fdd204aa59e71271eef04d44ea56a5373cb4049dd8fdc00fec2faced0173d15285ee22aaa903956b147 SHA512 37876e786d586618050f0b9d64445478202dd4bf729114052195b525ce2bb495dfe33149262a1c5637ce8ed5ba5e2107761ad16dd9e8fe3362722fcd0e7c6dcc +EBUILD bash-5.3_rc1_p20250430.ebuild 12245 BLAKE2B 21f7165230e018ca2bf41164c11192b2765670c1792536222506681433a84eb8663fb706b92227885d2f43cb596e50dc7475c8b6144bcbdb36bb0c979dda7974 SHA512 5a042f0597df9e56a9718826b80b99e89ca4d9c2a2526d9e81c4d1b8ec4bf020bb4875e4babb72e4cb945af9a0779c3dbb49af89adfb8fbe1c68e941a73ac9b4 +EBUILD bash-9999.ebuild 12041 BLAKE2B d276af6d0db1366891d546f2630dd792f5b00739f3eb63f4d71409d52565e12a28c6d06a5deacdb58226b339cb961cab40bcd2d72a3688cf28a6f098b3b00990 SHA512 1ac8380aae329638b3aeda8d730545205c28e1fa348c6d692d3390acb871dc0de0355e356d21603ea363f9d770a9254a3374ec8a2971020fb72e0afb98bd5aff MISC metadata.xml 1009 BLAKE2B f71587b0a6d05b907f82b26be93b071290d91dc8f612f7b008a05eaa94d45be2ef8c1d992b7ac886648a9dcf964c30e8d9a7aff90d44835beb452e0d635b9533 SHA512 8aa1cb4c3206a76d10181394a91c315967fd9d3b359194f430f075fdd5a0b4b32149eec36b85412ef7e84b55e7b01955c75486b2df82b392a5acb3df8229a88d diff --git a/app-shells/bash/bash-5.2_p37-r1.ebuild b/app-shells/bash/bash-5.2_p37-r1.ebuild new file mode 100644 index 000000000000..b3ac276e72dc --- /dev/null +++ b/app-shells/bash/bash-5.2_p37-r1.ebuild @@ -0,0 +1,408 @@ +# Copyright 1999-2025 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 ~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_p32-memory-leaks.patch" + "${FILESDIR}/${PN}-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch" + "${FILESDIR}/${PN}-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-2.patch" + "${FILESDIR}/${PN}-5.2_p32-erroneous-delimiter-pushback-condition.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 + + # bash 5.3 drops unprototyped functions, earlier versions are + # incompatible with C23. + append-cflags $(test-flags-CC -std=gnu17) + + 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-r1.bash | newins - 10-gentoo-color.bash + newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.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/bash-5.3_rc1_p20250430.ebuild b/app-shells/bash/bash-5.3_rc1_p20250430.ebuild index 044577058ba7..a71d009bc5db 100644 --- a/app-shells/bash/bash-5.3_rc1_p20250430.ebuild +++ b/app-shells/bash/bash-5.3_rc1_p20250430.ebuild @@ -318,8 +318,8 @@ src_install() { 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 + my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r1.bash | newins - 10-gentoo-color.bash + newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash if [[ ! ${EPREFIX} ]]; then doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash fi diff --git a/app-shells/bash/bash-9999.ebuild b/app-shells/bash/bash-9999.ebuild index ebd7607905d6..48dc6faddf97 100644 --- a/app-shells/bash/bash-9999.ebuild +++ b/app-shells/bash/bash-9999.ebuild @@ -315,8 +315,8 @@ src_install() { 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 + my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r1.bash | newins - 10-gentoo-color.bash + newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash if [[ ! ${EPREFIX} ]]; then doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash fi diff --git a/app-shells/bash/files/bash-5.2_p32-erroneous-delimiter-pushback-condition.patch b/app-shells/bash/files/bash-5.2_p32-erroneous-delimiter-pushback-condition.patch new file mode 100644 index 000000000000..6e8000952644 --- /dev/null +++ b/app-shells/bash/files/bash-5.2_p32-erroneous-delimiter-pushback-condition.patch @@ -0,0 +1,76 @@ +From 57fbf1c67f2d89365601f39e72781fba001fe2f3 Mon Sep 17 00:00:00 2001 +From: Kerin Millar <kfm@plushkava.net> +Date: Mon, 28 Apr 2025 08:13:38 +0100 +Subject: [PATCH 3/3] Backport fix for erroneous delimiter pushback condition + in read_mbchar + +This is a partial backport of commit 7731dc5c4d405ab147fc562e3af2a375ca593554 +from the devel branch. Consider the following test case. + +$ LC_ALL=en_US.UTF-8 +$ printf 'FOO\0\315\0\226\0' | while read -rd ''; do echo "${REPLY@Q}"; done + +With any vanilla 5.0, 5.1 or 5.2 release, the third record is disregarded. + +<FOO> +<$'\315'> + +With 5.3-rc1, the third record is treated as if it were two empty +records. The same is true of Gentoo's 5.2_p37 release. + +'FOO' +$'\315' +'' +'' + +With the upcoming 5.3-rc2, which will incoprorate this patch, all three +records are read correctly. + +<FOO> +<$'\315'> +<$'\226'> + +The issue is addressed by ensuring that the revised read_mbchar() +routine refrains from pushing back the delimiter - while effectively +truncating the mbchar buffer by writing a NUL byte - in cases where the +delimiter character was not read by the same routine. + +As of the time of writing, the issue has not been addressed by any of +the official patchlevels, nor has 5.3 been released. + +Link: https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/read.html#tag_20_100_06 +Link: https://mywiki.wooledge.org/BashPitfalls#IFS.3D_read_-r_-d_.27.27_filename +Link: https://lists.gnu.org/archive/html/bug-bash/2025-04/msg00065.html +Signed-off-by: Kerin Millar <kfm@plushkava.net> +--- + builtins/read.def | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git builtins/read.def builtins/read.def +index 9fd9a74c..8000def3 100644 +--- builtins/read.def ++++ builtins/read.def +@@ -1102,14 +1102,14 @@ read_mbchar (fd, string, ind, ch, delim, unbuffered) + } + 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 ((unsigned char)c == delim) ++ /* If we read (i > 1) a delimiter character (c == delimiter) ++ 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 (i > 1 && (unsigned char)c == delim) + { + zungetc ((unsigned char)c); +- mbchar[--i] = '\0'; /* unget the delimiter */ ++ i--; + } + break; /* invalid multibyte character */ + } +-- +2.49.0 + diff --git a/app-shells/bash/files/bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch b/app-shells/bash/files/bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch new file mode 100644 index 000000000000..949f5b2f7abc --- /dev/null +++ b/app-shells/bash/files/bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch @@ -0,0 +1,286 @@ +From 2482e34ac12910f7e7436a968caf97ab96f8b582 Mon Sep 17 00:00:00 2001 +From: Kerin Millar <kfm@plushkava.net> +Date: Sat, 26 Apr 2025 08:43:58 +0100 +Subject: [PATCH 1/3] Backport fix for invalid continuation bytes being ignored + as delimiters + +This is a partial backport of commit 772e7e760e8a098e4d8dee21cf11090be4757918 +from the devel branch. It addresses an issue in read_mbchar() whereby +the read builtin can read past the delimiter character, provided that is +invoked with a multibyte character set in effect. Consider the following +test case. + +$ LC_ALL=en_US.UTF-8 +$ for i in {194..245}; do printf -v o %o "$i"; printf "\\$o\\n"; done | + while read -r; do declare -p REPLY; done +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' + +The producing loop emits a sequence of bytes in the range 0xC2 - 0xF5. +Since each is terminated by a <newline> character, one would expect for +exactly 52 iterations of the consuming loop, with REPLY being assigned a +single byte each time. Instead, the input is read in its entirety. Why +is that, one may ask. + +Given a legal UTF-8 byte sequence, any bytes whose values are between +0xC2 - 0xF4 are combinative in nature; they can only be followed by +between one and three bytes that are outside of that range. + +0xC2 - 0xDF : First byte of a 2-byte code unit sequence +0xE0 - 0xEF : First byte of a 3-byte code unit sequence +0xF0 - 0xF4 : First byte of a 4-byte code unit sequence + +As such, bash begins by reading the 0xC2 byte, for which mbrtowc(3) +returns -2, indicating an incomplete multibyte sequence. Next, the 0x0A +byte is read, for which mbrtowc(3) returns -1, indicating an invalid +multibyte sequence. At this point, bash ought to recognise the most +recently read byte as a delimiter. Instead, it continues reading the +input stream up until the delimiter that follows 0xF5, which is neither +a combining character nor legal in UTF-8 in any capacity. + +This patch addresses the issue by introducing the zungetc() function, +which is used by read_mbchar() to push back the delimiter character that +transforms the sequence from an incomplete one to an invalid one. Said +character is then detected by the next invocation of the zread() +function, allowing for the decision to be made to return. + +With this, the output of the test case amounts to 52 lines, as expected. + +declare -- REPLY=$'\302' +declare -- REPLY=$'\303' +... +declare -- REPLY=$'\364' +declare -- REPLY=$'\365' + +The issue affects all bash releases from 5.0 to 5.3-alpha. As of the +time of writing, it has not been addressed by any of the official +patchlevels, nor has 5.3 been released. + +Link: https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/read.html#tag_20_100_06 +Link: https://mywiki.wooledge.org/BashPitfalls#IFS.3D_read_-r_-d_.27.27_filename +Link: https://lists.gnu.org/archive/html/bug-bash/2025-04/msg00068.html +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.49.0 + diff --git a/app-shells/bash/files/bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-2.patch b/app-shells/bash/files/bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-2.patch new file mode 100644 index 000000000000..ff6fdf25414b --- /dev/null +++ b/app-shells/bash/files/bash-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-2.patch @@ -0,0 +1,146 @@ +From fb31e1965baa732f9e4cdbe3a7d6691d7beb4e03 Mon Sep 17 00:00:00 2001 +From: Kerin Millar <kfm@plushkava.net> +Date: Mon, 28 Apr 2025 07:59:25 +0100 +Subject: [PATCH 2/3] Backport fix for invalid continuation bytes above 0x7F + being ignored as delimiters + +This is a partial backport of commit e327891b52513bef0b34aac625c44f8fa6811f53 +from the devel branch. It addresses an issue in read_mbchar() whereby an +invalid continuation byte greater than 0x7F isn't recognised as a valid +delimiter on platforms where char is signed. Consider the following test +case. + +$ LC_ALL=en_US.UTF-8; uname -m +x86_64 +$ printf '\317\360_' | { read -rd $'\360'; echo "${REPLY@Q}"; } +$'\317\360_' + +After applying this patch, the value of REPLY will be $'\317'. + +The issue affects all bash releases from 5.0 to 5.3-rc1. As of the time +of writing, it has not been addressed by any of the official +patchlevels, nor has 5.3 been released. + +Link: https://pubs.opengroup.org/onlinepubs/9799919799.2024edition/utilities/read.html#tag_20_100_06 +Link: https://mywiki.wooledge.org/BashPitfalls#IFS.3D_read_-r_-d_.27.27_filename +Link: https://lists.gnu.org/r/bug-bash/2024-08/msg00100.html +Signed-off-by: Kerin Millar <kfm@plushkava.net> +--- + builtins/read.def | 40 +++++++++++++++++++++++----------------- + 1 file changed, 23 insertions(+), 17 deletions(-) + +diff --git builtins/read.def builtins/read.def +index 53b4bd81..9fd9a74c 100644 +--- builtins/read.def ++++ builtins/read.def +@@ -142,7 +142,7 @@ sh_timer *read_timeout; + + static int reading, tty_modified; + static SigHandler *old_alrm; +-static unsigned char delim; ++static int delim; + + static struct ttsave termsave; + +@@ -320,7 +320,6 @@ read_builtin (list) + break; + case 'N': + ignore_delim = 1; +- delim = -1; + case 'n': + nflag = 1; + code = legal_number (list_optarg, &intval); +@@ -348,7 +347,7 @@ read_builtin (list) + } + break; + case 'd': +- delim = *list_optarg; ++ delim = (unsigned char)*list_optarg; + break; + CASE_HELPOPT; + default: +@@ -765,7 +764,7 @@ read_builtin (list) + continue; + } + +- if (ignore_delim == 0 && (unsigned char)c == delim) ++ if ((unsigned char)c == delim) + break; + + if (c == '\0' && delim != '\0') +@@ -1107,9 +1106,9 @@ read_mbchar (fd, string, ind, ch, delim, unbuffered) + 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) ++ if ((unsigned char)c == delim) + { +- zungetc (c); ++ zungetc ((unsigned char)c); + mbchar[--i] = '\0'; /* unget the delimiter */ + } + break; /* invalid multibyte character */ +@@ -1220,6 +1219,8 @@ edit_line (p, itext) + len = strlen (ret); + ret = (char *)xrealloc (ret, len + 2); + ret[len++] = delim; ++ if (delim > 0) ++ ret[len++] = delim; + ret[len] = '\0'; + return ret; + } +@@ -1240,7 +1241,7 @@ static rl_command_func_t *old_delim_func; + static int old_newline_ctype; + static rl_command_func_t *old_newline_func; + +-static unsigned char delim_char; ++static int delim_char; + + static void + set_eol_delim (c) +@@ -1252,19 +1253,21 @@ set_eol_delim (c) + initialize_readline (); + cmap = rl_get_keymap (); + +- /* Save the old delimiter char binding */ ++ /* Save the old newline binding and change it to self-insert */ + old_newline_ctype = cmap[RETURN].type; + old_newline_func = cmap[RETURN].function; +- old_delim_ctype = cmap[c].type; +- old_delim_func = cmap[c].function; +- +- /* Change newline to self-insert */ + cmap[RETURN].type = ISFUNC; + cmap[RETURN].function = rl_insert; + +- /* Bind the delimiter character to accept-line. */ +- cmap[c].type = ISFUNC; +- cmap[c].function = rl_newline; ++ /* Save any binding to the delimiter and bind the delimiter to accept-line */ ++ if (c >= 0) ++ { ++ old_delim_ctype = cmap[c].type; ++ old_delim_func = cmap[c].function; ++ ++ cmap[c].type = ISFUNC; ++ cmap[c].function = rl_newline; ++ } + + delim_char = c; + } +@@ -1280,7 +1283,10 @@ reset_eol_delim (cp) + cmap[RETURN].type = old_newline_ctype; + cmap[RETURN].function = old_newline_func; + +- cmap[delim_char].type = old_delim_ctype; +- cmap[delim_char].function = old_delim_func; ++ if (delim_char >= 0) ++ { ++ cmap[delim_char].type = old_delim_ctype; ++ cmap[delim_char].function = old_delim_func; ++ } + } + #endif +-- +2.49.0 + diff --git a/app-shells/bash/files/bashrc.d/10-gentoo-color-r1.bash b/app-shells/bash/files/bashrc.d/10-gentoo-color-r1.bash new file mode 100644 index 000000000000..72693cb33aa5 --- /dev/null +++ b/app-shells/bash/files/bashrc.d/10-gentoo-color-r1.bash @@ -0,0 +1,73 @@ +# /etc/bash/bashrc.d/10-gentoo-color.bash + +if [[ ${NO_COLOR} ]]; then + # Respect the user's wish not to use color. See https://no-color.org/. + gentoo_color=0 +elif [[ ${COLORTERM@a} == *x* && ${COLORTERM} == @(24bit|truecolor) ]]; then + # The COLORTERM environment variable can reasonably be trusted here. + # See https://github.com/termstandard/colors for further information. + gentoo_color=1 +elif unset -v COLORTERM; ! gentoo_color=$(tput colors 2>/dev/null); then + # Either ncurses is not installed or no terminfo database could be + # found. Fall back to a whitelist which covers the majority of terminal + # emulators and virtual console implementations known to support color + # and which remain (somewhat) popular. This will rarely happen, so the + # list need not be exhaustive. + case ${TERM} in + *color* |\ + *direct* |\ + *ghostty |\ + [Ekx]term* |\ + alacritty |\ + aterm |\ + contour |\ + dtterm |\ + foot* |\ + jfbterm |\ + linux |\ + mlterm |\ + rxvt* |\ + screen* |\ + tmux* |\ + wsvt25* ) gentoo_color=1 + esac +elif (( gentoo_color == 16777216 )); then + # Truecolor support is available. Advertise it. + export COLORTERM=truecolor +fi + +# For direxpand to be missing indicates that bash is lacking readline support. +if (( gentoo_color <= 0 )) || [[ ! $(shopt -p direxpand 2>/dev/null) ]]; then + # Define a prompt without color. + PS1='\u@\h \w \$ ' +elif (( EUID == 0 )); then + # If root, omit the username and print the hostname in red. + PS1='\[\e[01;31m\]\h\[\e[01;34m\] \w \$\[\e[00m\] ' +else + # Otherwise, print the username and hostname in green. + PS1='\[\e[01;32m\]\u@\h\[\e[01;34m\] \w \$\[\e[00m\] ' +fi + +if (( gentoo_color > 0 )); then + # Colorize the output of diff(1), grep(1) and a few coreutils utilities. + # However, do so only where no alias/function by the given name exists. + for _ in diff dir grep ls vdir; do + if [[ $(type -t "$_") == file ]]; then + alias "$_=$_ --color=auto" + fi + done + + # Enable colors for ls(1) and some other utilities that respect the + # LS_COLORS variable. Prefer ~/.dir_colors, per bug #64489. + if hash dircolors 2>/dev/null; then + if [[ -f ~/.dir_colors ]]; then + eval "$(COLORTERM=1 dircolors -b -- ~/.dir_colors)" + elif [[ -f /etc/DIR_COLORS ]]; then + eval "$(COLORTERM=1 dircolors -b /etc/DIR_COLORS)" + else + eval "$(COLORTERM=1 dircolors -b)" + fi + fi +fi + +unset -v gentoo_color diff --git a/app-shells/bash/files/bashrc.d/10-gentoo-title-r2.bash b/app-shells/bash/files/bashrc.d/10-gentoo-title-r2.bash new file mode 100644 index 000000000000..c1c560defb7c --- /dev/null +++ b/app-shells/bash/files/bashrc.d/10-gentoo-title-r2.bash @@ -0,0 +1,83 @@ +# /etc/bash/bashrc.d/10-gentoo-title.bash + +# For information regarding the control sequences used, please refer to +# https://invisible-island.net/xterm/ctlseqs/ctlseqs.html. + +genfun_set_win_title() { + # Advertise the fact that the presently running interactive shell will + # update the title. Doing so allows for its subprocesses to determine + # whether it is safe to set the title of their own accord. Note that 0 + # refers to the value of Ps within the OSC Ps ; Pt BEL sequence. + export SHELL_SETS_TITLE=0 + + # Assigns the basename of the current working directory, having + # sanitised it with @Q parameter expansion. Useful for paths containing + # newlines and such. As a special case, names consisting entirely of + # graphemes shall not undergo the expansion, for reasons of cleanliness. + genfun_sanitise_cwd() { + _cwd=${PWD##*/} + if [[ ! ${_cwd} ]]; then + _cwd=${PWD} + elif [[ ${_cwd} == *[![:graph:]]* ]]; then + _cwd=${_cwd@Q} + fi + } + + # Sets the window title with the Set Text Parameters control sequence. + # For screen, the sequence defines the hardstatus (%h) and for tmux, the + # pane_title (#T). For graphical terminal emulators, it is normal for + # the title bar to be affected. + genfun_set_win_title() { + local _cwd + + genfun_sanitise_cwd + printf '\033]0;%s@%s - %s\007' "${USER}" "${HOSTNAME%%.*}" "${_cwd}" + } + + genfun_set_win_title +} + +unset -v SHELL_SETS_TITLE + +# Determine whether the terminal can handle the Set Text Parameters sequence. +# The only terminals permitted here are those for which there is empirical +# evidence that the sequence is supported and that the UTF-8 character encoding +# is handled correctly. Quite rightly, this precludes many vintage terminals. +case ${TERM} in + alacritty*|contour|foot*|tmux*) + # The terminal emulator also supports XTWINOPS. If the PTY was + # created by sshd(8) then push the current window title to the + # stack and arrange for it to be popped upon exiting. Xterm also + # supports this but there are far too many terminal emulators + # that falsely identify as being xterm-compatible. + if [[ ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then + trap 'printf "\033[23;0t"' EXIT + printf '\033[22;0t' + fi + ;; + rxvt-unicode*|st-256color|xterm*) + # If the PTY was created by sshd(8) then proceed no further. + # Alas, there exist many operating environments in which the + # title would otherwise not be restored upon ssh(1) exiting. + # Those wanting for the title to be set regardless may adjust + # ~/.bashrc or create a bashrc.d drop-in to set PROMPT_COMMAND. + # For example, PROMPT_COMMAND=(genfun_set_win_title). + if [[ ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then + return + fi + ;; + screen*) + # If the PTY was created by sshd(8) and screen(1) was launched + # prior to the SSH session beginning, as opposed to afterwards, + # proceed no further. It is another case in which there would be + # no guarantee of the title being restored upon ssh(1) exiting. + if [[ ! ${WINDOW} && ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then + return + fi + ;; + *) + return +esac + +# Arrange for the title to be updated each time the primary prompt is displayed. +PROMPT_COMMAND+=('genfun_set_win_title') |