Compare commits

...
Sign in to create a new pull request.

14 commits

Author SHA1 Message Date
Lukáš Zaoral
4a2d529430
fix crash with bracketed-paste-magic and undo
Resolves: rhbz#2484692
2026-07-22 16:16:15 +02:00
Fedora Release Engineering
05dc358b1a Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-17 09:43:40 +00:00
Lukáš Zaoral
b7e65312fa
rebase to the latest upstream release
Resolves: rhbz#2499540
2026-07-13 12:15:06 +02:00
Lukáš Zaoral
95be2e37b5
rebase to the latest upstream release
Resolves: rhbz#2483668
2026-06-04 11:03:21 +02:00
Lukáš Zaoral
ea51b5077a
Fix typo in changelog 2026-03-24 10:31:31 +01:00
Lukáš Zaoral
fed92fd5ff
fix segfault in _IO_putc
Resolves: rhbz#2449939
2026-03-24 10:31:08 +01:00
Fedora Release Engineering
43281b3111 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-17 21:11:08 +00:00
Christoph Erhardt
43ef6c97ad Add completion support for dnf5 2025-09-30 21:32:33 +02:00
Fedora Release Engineering
62445c1b7d Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 21:20:56 +00:00
Lukáš Zaoral
631ad08bf2
tests: remove dependency on Fedora shell tests 2025-04-11 17:03:32 +02:00
Fedora Release Engineering
1c5480cb7f Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-19 16:52:32 +00:00
Fedora Release Engineering
10d8a43846 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-20 10:57:13 +00:00
Lukáš Zaoral
ba0ada335b
Fix zlogout when ncurses is not installed
Resolves: rhbz#2279741
Fixes: d2bb79226e (Skip 'clear' if missing for zlogout.rhs)
2024-05-13 10:57:14 +02:00
Nate Leong
d2bb79226e Skip 'clear' if missing for zlogout.rhs
In the fedora:39 Docker image, the following occurs:

# logout
/etc/zlogout:7: command not found: clear
2024-04-01 01:30:04 +00:00
15 changed files with 415 additions and 1693 deletions

View file

@ -1 +0,0 @@
1

View file

@ -1,178 +0,0 @@
From 6935aa4b515fe9b782507820c77ab681136470bc Mon Sep 17 00:00:00 2001
From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
Date: Thu, 15 Sep 2022 18:56:20 +0900
Subject: [PATCH] 50629: do not use egrep in tests
Upstream-commit: 4fc5dc0292acd77f17281f451774ba2ca4203026
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
Test/D07multibyte.ztst | 16 ++--------------
Test/E01options.ztst | 2 +-
Test/V07pcre.ztst | 16 ++--------------
Test/X02zlevi.ztst | 11 +----------
Test/X03zlebindkey.ztst | 11 +----------
Test/Y01completion.ztst | 11 +----------
Test/ztst.zsh | 15 +++++++++++++++
7 files changed, 23 insertions(+), 59 deletions(-)
diff --git a/Test/D07multibyte.ztst b/Test/D07multibyte.ztst
index e2e9a25..6909346 100644
--- a/Test/D07multibyte.ztst
+++ b/Test/D07multibyte.ztst
@@ -1,19 +1,7 @@
%prep
-# Find a UTF-8 locale.
- setopt multibyte
-# Don't let LC_* override our choice of locale.
- unset -m LC_\*
- mb_ok=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- mb_ok=1
- break;
- fi
- done
- if [[ -z $mb_ok ]]; then
+ LANG=$(ZTST_find_UTF8)
+ if [[ -z $LANG ]]; then
ZTST_unimplemented="no UTF-8 locale or multibyte mode is not implemented"
else
print -u $ZTST_fd Testing multibyte with locale $LANG
diff --git a/Test/E01options.ztst b/Test/E01options.ztst
index 2acbfd3..d38fbed 100644
--- a/Test/E01options.ztst
+++ b/Test/E01options.ztst
@@ -651,7 +651,7 @@
>noktarg1
>0 1
- showopt() { setopt | egrep 'localoptions|ksharrays'; }
+ showopt() { echo ${(FM)${(@f)"$(setopt)"}:#(localoptions|ksharrays)*} }
f1() { setopt localoptions ksharrays; showopt }
f2() { setopt ksharrays; showopt }
setopt kshoptionprint
diff --git a/Test/V07pcre.ztst b/Test/V07pcre.ztst
index c9c844d..ca13419 100644
--- a/Test/V07pcre.ztst
+++ b/Test/V07pcre.ztst
@@ -6,20 +6,8 @@
return 0
fi
setopt rematch_pcre
-# Find a UTF-8 locale.
- setopt multibyte
-# Don't let LC_* override our choice of locale.
- unset -m LC_\*
- mb_ok=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- mb_ok=1
- break;
- fi
- done
- if [[ -z $mb_ok ]]; then
+ LANG=$(ZTST_find_UTF8)
+ if [[ -z $LANG ]]; then
ZTST_unimplemented="no UTF-8 locale or multibyte mode is not implemented"
else
print -u $ZTST_fd Testing PCRE multibyte with locale $LANG
diff --git a/Test/X02zlevi.ztst b/Test/X02zlevi.ztst
index 8146d67..203c13c 100644
--- a/Test/X02zlevi.ztst
+++ b/Test/X02zlevi.ztst
@@ -1,16 +1,7 @@
# Tests of the vi mode of ZLE
%prep
- unset -m LC_\*
- ZSH_TEST_LANG=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- ZSH_TEST_LANG=$LANG
- break;
- fi
- done
+ ZSH_TEST_LANG=$(ZTST_find_UTF8)
if ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
comptestinit -v -z $ZTST_testdir/../Src/zsh
diff --git a/Test/X03zlebindkey.ztst b/Test/X03zlebindkey.ztst
index 43692a8..5277332 100644
--- a/Test/X03zlebindkey.ztst
+++ b/Test/X03zlebindkey.ztst
@@ -3,16 +3,7 @@
# into bindings. The latter is particularly tricky with multibyte sequences.
%prep
- unset -m LC_\*
- ZSH_TEST_LANG=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- ZSH_TEST_LANG=$LANG
- break;
- fi
- done
+ ZSH_TEST_LANG=$(ZTST_find_UTF8)
if ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
comptestinit -z $ZTST_testdir/../Src/zsh
diff --git a/Test/Y01completion.ztst b/Test/Y01completion.ztst
index 6af0efc..f976f9f 100644
--- a/Test/Y01completion.ztst
+++ b/Test/Y01completion.ztst
@@ -1,16 +1,7 @@
# Tests for completion system.
%prep
- unset -m LC_\*
- ZSH_TEST_LANG=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- ZSH_TEST_LANG=$LANG
- break;
- fi
- done
+ ZSH_TEST_LANG=$(ZTST_find_UTF8)
if ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
mkdir comp.tmp
diff --git a/Test/ztst.zsh b/Test/ztst.zsh
index aca275c..d95b726 100755
--- a/Test/ztst.zsh
+++ b/Test/ztst.zsh
@@ -37,6 +37,21 @@ emulate -R zsh
# LANG must be passed to child zsh.
export LANG
+# find UTF-8 locale
+ZTST_find_UTF8 () {
+ setopt multibyte
+ # Don't let LC_* override our choice of locale.
+ unset -m LC_\*
+ local langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
+ ${(M)$(locale -a 2>/dev/null):#*.(utf8|UTF-8)})
+ for LANG in $langs; do
+ if [[ é = ? ]]; then
+ echo $LANG
+ return
+ fi
+ done
+}
+
# Don't propagate variables that are set by default in the shell.
typeset +x WORDCHARS
--
2.39.0

View file

@ -1,541 +0,0 @@
commit ab4d62eb975a4c4c51dd35822665050e2ddc6918
Author: Nicholas Vinson <nvinson234@gmail.com>
Date: Wed Sep 21 09:22:11 2022 +0900
50641: use 'int main()' in test C-codes in configure
diff --git a/aczsh.m4 b/aczsh.m4
index 1209ac614..b31236020 100644
--- a/aczsh.m4
+++ b/aczsh.m4
@@ -44,6 +44,7 @@ AC_DEFUN(zsh_64_BIT_TYPE,
#include <sys/types.h>
#endif
+int
main()
{
$1 foo = 0;
@@ -118,7 +119,6 @@ AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&AS_MESSAGE_LOG_FD) &&
AC_TRY_COMMAND($DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&AS_MESSAGE_LOG_FD); then
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -146,29 +146,30 @@ char *zsh_gl_sym_addr ;
#define RTLD_GLOBAL 0
#endif
+int
main()
{
void *handle1, *handle2;
void *(*zsh_getaddr1)(), *(*zsh_getaddr2)();
void *sym1, *sym2;
handle1 = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle1) exit(1);
+ if(!handle1) return(1);
handle2 = dlopen("./conftest2.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle2) exit(1);
+ if(!handle2) return(1);
zsh_getaddr1 = (void *(*)()) dlsym(handle1, "${us}zsh_getaddr1");
zsh_getaddr2 = (void *(*)()) dlsym(handle2, "${us}zsh_getaddr2");
sym1 = zsh_getaddr1();
sym2 = zsh_getaddr2();
- if(!sym1 || !sym2) exit(1);
- if(sym1 != sym2) exit(1);
+ if(!sym1 || !sym2) return(1);
+ if(sym1 != sym2) return(1);
dlclose(handle1);
handle1 = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle1) exit(1);
+ if(!handle1) return(1);
zsh_getaddr1 = (void *(*)()) dlsym(handle1, "${us}zsh_getaddr1");
sym1 = zsh_getaddr1();
- if(!sym1) exit(1);
- if(sym1 != sym2) exit(1);
- exit(0);
+ if(!sym1) return(1);
+ if(sym1 != sym2) return(1);
+ return(0);
}
]])],[zsh_cv_shared_$1=yes],
[zsh_cv_shared_$1=no],
@@ -200,7 +201,6 @@ AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&AS_MESSAGE_LOG_FD) &&
AC_TRY_COMMAND($DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&AS_MESSAGE_LOG_FD); then
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -228,19 +228,19 @@ char *zsh_gl_sym_addr ;
#define RTLD_GLOBAL 0
#endif
-
+int
main()
{
void *handle1, *handle2;
int (*fred1)(), (*fred2)();
handle1 = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle1) exit(1);
+ if(!handle1) return(1);
handle2 = dlopen("./conftest2.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle2) exit(1);
+ if(!handle2) return(1);
fred1 = (int (*)()) dlsym(handle1, "${us}fred");
fred2 = (int (*)()) dlsym(handle2, "${us}fred");
- if(!fred1 || !fred2) exit(1);
- exit((*fred1)() != 42 || (*fred2)() != 69);
+ if(!fred1 || !fred2) return(1);
+ return((*fred1)() != 42 || (*fred2)() != 69);
}
]])],[zsh_cv_sys_dynamic_clash_ok=yes],
[zsh_cv_sys_dynamic_clash_ok=no],
@@ -276,7 +276,6 @@ AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&AS_MESSAGE_LOG_FD) &&
AC_TRY_COMMAND($DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&AS_MESSAGE_LOG_FD); then
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -304,17 +303,18 @@ char *zsh_gl_sym_addr ;
#define RTLD_GLOBAL 0
#endif
+int
main()
{
void *handle;
int (*barneysym)();
handle = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle) exit(1);
+ if(!handle) return(1);
handle = dlopen("./conftest2.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle) exit(1);
+ if(!handle) return(1);
barneysym = (int (*)()) dlsym(handle, "${us}barney");
- if(!barneysym) exit(1);
- exit((*barneysym)() != 69);
+ if(!barneysym) return(1);
+ return((*barneysym)() != 69);
}
]])],[zsh_cv_sys_dynamic_rtld_global=yes],
[zsh_cv_sys_dynamic_rtld_global=no],
@@ -346,7 +346,6 @@ AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS
save_ldflags=$LDFLAGS
LDFLAGS="$LDFLAGS $EXTRA_LDFLAGS"
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -374,15 +373,16 @@ char *zsh_gl_sym_addr ;
#define RTLD_GLOBAL 0
#endif
+int
main()
{
void *handle;
int (*barneysym)();
handle = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle) exit(1);
+ if(!handle) return(1);
barneysym = (int (*)()) dlsym(handle, "${us}barney");
- if(!barneysym) exit(1);
- exit((*barneysym)() != 69);
+ if(!barneysym) return(1);
+ return((*barneysym)() != 69);
}
int fred () { return 42; }
@@ -420,7 +420,6 @@ elif
save_ldflags=$LDFLAGS
LDFLAGS="$LDFLAGS $EXTRA_LDFLAGS -s"
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -448,15 +447,16 @@ char *zsh_gl_sym_addr ;
#define RTLD_GLOBAL 0
#endif
+int
main()
{
void *handle;
int (*barneysym)();
handle = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle) exit(1);
+ if(!handle) return(1);
barneysym = (int (*)()) dlsym(handle, "${us}barney");
- if(!barneysym) exit(1);
- exit((*barneysym)() != 69);
+ if(!barneysym) return(1);
+ return((*barneysym)() != 69);
}
int fred () { return 42; }
@@ -488,7 +488,6 @@ echo 'int fred () { return 42; }' > conftest1.c
if AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AS_MESSAGE_LOG_FD) &&
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS -s conftest1.o $LIBS 1>&AS_MESSAGE_LOG_FD); then
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -516,15 +515,16 @@ char *zsh_gl_sym_addr ;
#define RTLD_GLOBAL 0
#endif
+int
main()
{
void *handle;
int (*fredsym)();
handle = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
- if(!handle) exit(1);
+ if(!handle) return(1);
fredsym = (int (*)()) dlsym(handle, "${us}fred");
- if(!fredsym) exit(1);
- exit((*fredsym)() != 42);
+ if(!fredsym) return(1);
+ return((*fredsym)() != 42);
}
]])],[zsh_cv_sys_dynamic_strip_lib=yes],
[zsh_cv_sys_dynamic_strip_lib=no],
diff --git a/configure.ac b/configure.ac
index 890ef8dd2..074141d38 100644
--- a/configure.ac
+++ b/configure.ac
@@ -585,7 +585,7 @@ fi
dnl Checking if compiler correctly cast signed to unsigned.
AC_CACHE_CHECK(if signed to unsigned casting is broken,
zsh_cv_c_broken_signed_to_unsigned_casting,
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[main(){return((int)(unsigned char)((char) -1) == 255);}]])],[zsh_cv_c_broken_signed_to_unsigned_casting=yes],[zsh_cv_c_broken_signed_to_unsigned_casting=no],[zsh_cv_c_broken_signed_to_unsigned_casting=no])])
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[int main(){return((int)(unsigned char)((char) -1) == 255);}]])],[zsh_cv_c_broken_signed_to_unsigned_casting=yes],[zsh_cv_c_broken_signed_to_unsigned_casting=no],[zsh_cv_c_broken_signed_to_unsigned_casting=no])])
AH_TEMPLATE([BROKEN_SIGNED_TO_UNSIGNED_CASTING],
[Define to 1 if compiler incorrectly cast signed to unsigned.])
if test x$zsh_cv_c_broken_signed_to_unsigned_casting = xyes; then
@@ -1046,7 +1046,7 @@ else
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <sys/types.h>
-main() { return sizeof(off_t) < 8; }
+int main() { return sizeof(off_t) < 8; }
]])],[zsh_cv_off_t_is_64_bit=yes],[zsh_cv_off_t_is_64_bit=no],[zsh_cv_off_t_is_64_bit=no])])
if test x$zsh_cv_off_t_is_64_bit = xyes; then
AC_DEFINE(OFF_T_IS_64_BIT)
@@ -1056,7 +1056,7 @@ main() { return sizeof(off_t) < 8; }
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <sys/types.h>
-main() { return sizeof(ino_t) < 8; }
+int main() { return sizeof(ino_t) < 8; }
]])],[zsh_cv_ino_t_is_64_bit=yes],[zsh_cv_ino_t_is_64_bit=no],[zsh_cv_ino_t_is_64_bit=no])])
if test x$zsh_cv_ino_t_is_64_bit = xyes; then
AC_DEFINE(INO_T_IS_64_BIT)
@@ -1369,7 +1369,7 @@ zsh_cv_func_realpath_accepts_null,
#include <stdlib.h>
#include <limits.h>
],[
-exit(!realpath("/", (char*)0));
+return(!realpath("/", (char*)0));
])],
[zsh_cv_func_realpath_accepts_null=yes],
[zsh_cv_func_realpath_accepts_null=no],
@@ -1393,10 +1393,9 @@ AC_CACHE_CHECK(if tgetent accepts NULL,
zsh_cv_func_tgetent_accepts_null,
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <fcntl.h>
-#include <stdlib.h>
int tgetent(char *, char *);
char *tgetstr(char *, char **);
-main()
+int main()
{
char buf[4096];
int r1 = tgetent(buf, "vt100");
@@ -1407,7 +1406,7 @@ main()
tgetstr("cl", &u);
creat("conftest.tgetent", 0640);
}
- exit((r1 != r2) || r2 == -1);
+ return((r1 != r2) || r2 == -1);
}
]])],[if test -f conftest.tgetent; then
zsh_cv_func_tgetent_accepts_null=yes
@@ -1421,10 +1420,9 @@ AC_CACHE_CHECK(if tgetent returns 0 on success,
zsh_cv_func_tgetent_zero_success,
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <fcntl.h>
-#include <stdlib.h>
int tgetent(char *, char*);
char *tgetstr(char *, char **);
-main()
+int main()
{
char buf[4096];
int r1 = tgetent(buf, "!@#$%^&*");
@@ -1435,7 +1433,7 @@ main()
tgetstr("cl", &u);
creat("conftest.tgetent0", 0640);
}
- exit(r1 == r2);
+ return(r1 == r2);
}
]])],[if test -f conftest.tgetent0; then
zsh_cv_func_tgetent_zero_success=yes
@@ -1869,8 +1867,7 @@ zsh_cv_rlim_t_is_longer,
#include <sys/time.h>
#endif
#include <sys/resource.h>
-#include <stdlib.h>
-main(){struct rlimit r;exit(sizeof(r.rlim_cur) <= sizeof(long));}]])],[zsh_cv_rlim_t_is_longer=yes],[zsh_cv_rlim_t_is_longer=no],[zsh_cv_rlim_t_is_longer=yes])])
+int main(){struct rlimit r;return(sizeof(r.rlim_cur) <= sizeof(long));}]])],[zsh_cv_rlim_t_is_longer=yes],[zsh_cv_rlim_t_is_longer=no],[zsh_cv_rlim_t_is_longer=yes])])
if test x$zsh_cv_rlim_t_is_longer = xyes; then
AC_CACHE_CHECK(if rlim_t is a quad,
zsh_cv_rlim_t_is_quad_t,
@@ -1880,13 +1877,12 @@ if test x$zsh_cv_rlim_t_is_longer = xyes; then
#endif
#include <stdio.h>
#include <sys/resource.h>
-#include <stdlib.h>
-main() {
+int main() {
struct rlimit r;
char buf[20];
r.rlim_cur = 0;
sprintf(buf, "%qd", r.rlim_cur);
- exit(strcmp(buf, "0"));
+ return(strcmp(buf, "0"));
}]])],[zsh_cv_rlim_t_is_quad_t=yes],[zsh_cv_rlim_t_is_quad_t=no],[zsh_cv_rlim_t_is_quad_t=no])])
if test x$zsh_cv_rlim_t_is_quad_t = xyes; then
AC_DEFINE(RLIM_T_IS_QUAD_T)
@@ -1903,8 +1899,7 @@ else
#include <sys/time.h>
#endif
#include <sys/resource.h>
-#include <stdlib.h>
- main(){struct rlimit r;r.rlim_cur=-1;exit(r.rlim_cur<0);}]])],[zsh_cv_type_rlim_t_is_unsigned=yes],[zsh_cv_type_rlim_t_is_unsigned=no],[zsh_cv_type_rlim_t_is_unsigned=no])])
+ int main(){struct rlimit r;r.rlim_cur=-1;return(r.rlim_cur<0);}]])],[zsh_cv_type_rlim_t_is_unsigned=yes],[zsh_cv_type_rlim_t_is_unsigned=no],[zsh_cv_type_rlim_t_is_unsigned=no])])
if test x$zsh_cv_type_rlim_t_is_unsigned = xyes; then
AC_DEFINE(RLIM_T_IS_UNSIGNED)
DEFAULT_RLIM_T="unsigned $DEFAULT_RLIM_T"
@@ -2187,9 +2182,8 @@ zsh_cv_sys_fifo,
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
-#include <stdlib.h>
#include <sys/stat.h>
-main()
+int main()
{
char c;
int fd;
@@ -2200,18 +2194,18 @@ main()
#else
if(mknod("/tmp/fifo$$", 0010600, 0) < 0)
#endif
- exit(1);
+ return(1);
pid = fork();
if(pid < 0)
- exit(1);
+ return(1);
if(pid) {
fd = open("/tmp/fifo$$", O_RDONLY);
- exit(fd < 0 || read(fd, &c, 1) != 1 || c != 'x');
+ return(fd < 0 || read(fd, &c, 1) != 1 || c != 'x');
}
fd = open("/tmp/fifo$$", O_WRONLY);
ret = (fd < 0 || write(fd, "x", 1) < 1);
unlink("/tmp/fifo$$");
- exit(ret);
+ return(ret);
}
]])],[zsh_cv_sys_fifo=yes],[zsh_cv_sys_fifo=no],[zsh_cv_sys_fifo=yes])
])
@@ -2289,8 +2283,7 @@ zsh_cv_sys_link,
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <unistd.h>
#include <fcntl.h>
-#include <stdlib.h>
-main()
+int main()
{
int ret;
char *tmpfile, *newfile;
@@ -2299,11 +2292,11 @@ main()
unlink(tmpfile);
unlink(newfile);
if(creat(tmpfile, 0644) < 0)
- exit(1);
+ return(1);
ret = link(tmpfile, newfile);
unlink(tmpfile);
unlink(newfile);
- exit(ret<0);
+ return(ret<0);
}
]])],[zsh_cv_sys_link=yes],[zsh_cv_sys_link=no],[zsh_cv_sys_link=yes])])
AH_TEMPLATE([HAVE_LINK],
@@ -2322,12 +2315,11 @@ zsh_cv_sys_killesrch,
#include <unistd.h>
#include <signal.h>
#include <errno.h>
-#include <stdlib.h>
-main()
+int main()
{
int pid = (getpid() + 10000) & 0xffffff;
while (pid && (kill(pid, 0) == 0 || errno != ESRCH)) pid >>= 1;
- exit(errno!=ESRCH);
+ return(errno!=ESRCH);
}
]])],[zsh_cv_sys_killesrch=yes],[zsh_cv_sys_killesrch=no],[zsh_cv_sys_killesrch=yes])])
AH_TEMPLATE([BROKEN_KILL_ESRCH],
@@ -2348,12 +2340,11 @@ if test x$signals_style = xPOSIX_SIGNALS; then
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <signal.h>
#include <unistd.h>
-#include <stdlib.h>
int child=0;
void handler(sig)
int sig;
{if(sig==SIGCHLD) child=1;}
-main() {
+int main() {
struct sigaction act;
sigset_t set;
int pid, ret;
@@ -2368,7 +2359,7 @@ main() {
if(pid>0) {
sigemptyset(&set);
ret=sigsuspend(&set);
- exit(child==0);
+ return(child==0);
}
}
]])],[zsh_cv_sys_sigsuspend=yes],[zsh_cv_sys_sigsuspend=no],[zsh_cv_sys_sigsuspend=yes])])
@@ -2400,15 +2391,14 @@ case "x$zsh_working_tcsetpgrp" in
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
-#include <stdlib.h>
-main() {
+int main() {
int fd;
int ret;
fd=open("/dev/tty", O_RDWR);
- if (fd < 0) exit(2);
+ if (fd < 0) return(2);
ret=tcsetpgrp(fd, tcgetpgrp(fd));
- if (ret < 0) exit(1);
- exit(0);
+ if (ret < 0) return(1);
+ return(0);
}
]])],[zsh_cv_sys_tcsetpgrp=yes],[
case $? in
@@ -2448,7 +2438,7 @@ if test x$ac_cv_func_getpwnam = xyes; then
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
-main() {
+int main() {
struct passwd *pw1, *pw2;
char buf[1024], name[1024];
sprintf(buf, "%d:%d", getpid(), rand());
@@ -2456,7 +2446,7 @@ main() {
if (pw1) strcpy(name, pw1->pw_name);
sprintf(buf, "%d:%d", rand(), getpid());
pw2=getpwnam(buf);
- exit(pw1!=0 && pw2!=0 && !strcmp(name, pw2->pw_name));
+ return(pw1!=0 && pw2!=0 && !strcmp(name, pw2->pw_name));
}
]])],[zsh_cv_sys_getpwnam_faked=no],[zsh_cv_sys_getpwnam_faked=yes],[zsh_cv_sys_getpwnam_faked=no])])
if test x$zsh_cv_sys_getpwnam_faked = xyes; then
@@ -2775,20 +2765,17 @@ elif test "x$dynamic" = xyes; then
zsh_cv_sys_elf,
[AC_RUN_IFELSE([AC_LANG_SOURCE([[/* Test for whether ELF binaries are produced */
#include <fcntl.h>
-#include <stdlib.h>
#include <unistd.h>
-main(argc, argv)
-int argc;
-char *argv[];
+int main(int argc, char *argv[])
{
char b[4];
int i = open(argv[0],O_RDONLY);
if(i == -1)
- exit(1); /* fail */
+ return(1); /* fail */
if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
- exit(0); /* succeed (yes, it's ELF) */
+ return(0); /* succeed (yes, it's ELF) */
else
- exit(1); /* fail */
+ return(1); /* fail */
}]])],[zsh_cv_sys_elf=yes],[zsh_cv_sys_elf=no],[zsh_cv_sys_elf=yes])])
# We use [0-9]* in case statements, so need to change quoting
@@ -2924,13 +2911,12 @@ LDFLAGS="$old_LDFLAGS")
AC_CACHE_CHECK(if your dlsym() needs a leading underscore,
zsh_cv_func_dlsym_needs_underscore,
[echo failed >conftestval && cat >conftest.c <<EOM
-fred () { }
+void fred () { }
EOM
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest.c 1>&AS_MESSAGE_LOG_FD) &&
AC_TRY_COMMAND($DLLD $LDFLAGS $DLLDFLAGS -o conftest.$DL_EXT conftest.o 1>&AS_MESSAGE_LOG_FD) &&
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
-#include <stdlib.h>
#ifdef HPUX10DYNAMIC
#include <dl.h>
#define RTLD_LAZY BIND_DEFERRED
@@ -2957,16 +2943,16 @@ char *zsh_gl_sym_addr ;
extern int fred() ;
-main()
+int main()
{
void * handle ;
void * symbol ;
FILE *f=fopen("conftestval", "w");
- if (!f) exit(1);
+ if (!f) return(1);
handle = dlopen("./conftest.$DL_EXT", RTLD_LAZY) ;
if (handle == NULL) {
fprintf (f, "dlopen failed") ;
- exit(1);
+ return(1);
}
symbol = dlsym(handle, "fred") ;
if (symbol == NULL) {
@@ -2974,13 +2960,13 @@ main()
symbol = dlsym(handle, "_fred") ;
if (symbol == NULL) {
fprintf (f, "dlsym failed") ;
- exit(1);
+ return(1);
}
fprintf (f, "yes") ;
}
else
fprintf (f, "no") ;
- exit(0);
+ return(0);
}]])],[zsh_cv_func_dlsym_needs_underscore=`cat conftestval`],[zsh_cv_func_dlsym_needs_underscore=failed
dynamic=no],[zsh_cv_func_dlsym_needs_underscore=no])])
if test "x$zsh_cv_func_dlsym_needs_underscore" = xyes; then

View file

@ -1,69 +0,0 @@
From a84fdd7c8f77935ecce99ff2b0bdba738821ed79 Mon Sep 17 00:00:00 2001
From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
Date: Mon, 26 Jun 2023 17:13:04 +0900
Subject: [PATCH] 51889: fix module loading problem with full RELRO
If full RELRO (relocation read-only, one of the security enhancement
methods for ELF-based systems) is used when building zsh (as in binary
packages of most Linuxes), loading a module (e.g. zsh/zftp) fails unless
all the modules it depends on are already loaded. With this patch the
necessary modules are automatically loaded.
Upstream-commit: a84fdd7c8f77935ecce99ff2b0bdba738821ed79
Signed-off-by: Lukáš Zaoral <lzaoral@redhat.com>
---
Src/Modules/zftp.c | 2 +-
Src/mkbltnmlst.sh | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/Src/Modules/zftp.c b/Src/Modules/zftp.c
index 49b3ffa89..47a5e9de9 100644
--- a/Src/Modules/zftp.c
+++ b/Src/Modules/zftp.c
@@ -3172,7 +3172,7 @@ static struct features module_features = {
int
setup_(UNUSED(Module m))
{
- return (require_module("zsh/net/tcp", NULL, 0) == 1);
+ return 0;
}
/**/
diff --git a/Src/mkbltnmlst.sh b/Src/mkbltnmlst.sh
index c4611d8b3..067ecdaf9 100644
--- a/Src/mkbltnmlst.sh
+++ b/Src/mkbltnmlst.sh
@@ -76,6 +76,30 @@ for x_mod in $x_mods; do
test "x$linked" = xno && echo "#endif"
done
+# if dynamic module 'mod' with load=no has moddeps in its .mdd,
+# then output add_dep(mod, dep) for each 'dep' in moddeps.
+dyn_mods="`grep ' link=dynamic .* load=no ' $CFMOD | \
+ sed -e '/^#/d' -e 's/ .*/ /' -e 's/^name=/ /'`"
+
+for mod in $dyn_mods; do
+ modfile="`grep '^name='$mod' ' $CFMOD | \
+ sed -e 's/^.* modfile=//' -e 's/ .*//'`"
+ if test "x$modfile" = x; then
+ echo >&2 "WARNING: no name for \`$mod' in $CFMOD (ignored)"
+ continue
+ fi
+ unset moddeps
+ . $srcdir/../$modfile
+ if test -n "$moddeps"; then
+ echo '#ifdef DYNAMIC'
+ echo "/* non-linked-in known module \`$mod' */"
+ for dep in $moddeps; do
+ echo " add_dep(\"$mod\", \"$dep\");"
+ done
+ echo '#endif'
+ fi
+done
+
echo
done_mods=" "
for bin_mod in $bin_mods; do
--
2.41.0

View file

@ -1,64 +0,0 @@
From 1b421e4978440234fb73117c8505dad1ccc68d46 Mon Sep 17 00:00:00 2001
From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
Date: Mon, 26 Sep 2022 10:52:50 +0900
Subject: [PATCH] 50658 + test: Enable to switch between C/UTF-8 locales in
PCRE
---
Src/Modules/pcre.c | 10 ++--------
Test/V07pcre.ztst | 11 +++++++++++
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/Src/Modules/pcre.c b/Src/Modules/pcre.c
index 6289e003e..46875a59b 100644
--- a/Src/Modules/pcre.c
+++ b/Src/Modules/pcre.c
@@ -47,8 +47,6 @@ zpcre_utf8_enabled(void)
#if defined(MULTIBYTE_SUPPORT) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
static int have_utf8_pcre = -1;
- /* value can toggle based on MULTIBYTE, so don't
- * be too eager with caching */
if (have_utf8_pcre < -1)
return 0;
@@ -56,15 +54,11 @@ zpcre_utf8_enabled(void)
return 0;
if ((have_utf8_pcre == -1) &&
- (!strcmp(nl_langinfo(CODESET), "UTF-8"))) {
-
- if (pcre_config(PCRE_CONFIG_UTF8, &have_utf8_pcre))
+ (pcre_config(PCRE_CONFIG_UTF8, &have_utf8_pcre))) {
have_utf8_pcre = -2; /* erk, failed to ask */
}
- if (have_utf8_pcre < 0)
- return 0;
- return have_utf8_pcre;
+ return (have_utf8_pcre == 1) && (!strcmp(nl_langinfo(CODESET), "UTF-8"));
#else
return 0;
diff --git a/Test/V07pcre.ztst b/Test/V07pcre.ztst
index ca13419e5..22a0b64c7 100644
--- a/Test/V07pcre.ztst
+++ b/Test/V07pcre.ztst
@@ -162,3 +162,14 @@
echo $match[2] )
0:regression for segmentation fault, workers/38307
>test
+
+ LANG_SAVE=$LANG
+ [[ é =~ '^.\z' ]]; echo $?
+ LANG=C
+ [[ é =~ '^..\z' ]]; echo $?
+ LANG=$LANG_SAVE
+ [[ é =~ '^.\z' ]]; echo $?
+0:swich between C/UTF-8 locales
+>0
+>0
+>0
--
2.41.0

View file

@ -1,641 +0,0 @@
From b62e911341c8ec7446378b477c47da4256053dc0 Mon Sep 17 00:00:00 2001
From: Oliver Kiddle <opk@zsh.org>
Date: Sat, 13 May 2023 00:53:32 +0200
Subject: [PATCH] 51723: migrate pcre module to pcre2
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
---
Src/Modules/pcre.c | 223 ++++++++++++++++++---------------------------
Test/V07pcre.ztst | 13 ++-
configure.ac | 20 ++--
3 files changed, 109 insertions(+), 149 deletions(-)
diff --git a/Src/Modules/pcre.c b/Src/Modules/pcre.c
index 46875a59b..079ecc2c5 100644
--- a/Src/Modules/pcre.c
+++ b/Src/Modules/pcre.c
@@ -34,11 +34,11 @@
#define CPCRE_PLAIN 0
/**/
-#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
-#include <pcre.h>
+#if defined(HAVE_PCRE2_COMPILE_8) && defined(HAVE_PCRE2_H)
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
-static pcre *pcre_pattern;
-static pcre_extra *pcre_hints;
+static pcre2_code *pcre_pattern;
/**/
static int
@@ -54,8 +54,8 @@ zpcre_utf8_enabled(void)
return 0;
if ((have_utf8_pcre == -1) &&
- (pcre_config(PCRE_CONFIG_UTF8, &have_utf8_pcre))) {
- have_utf8_pcre = -2; /* erk, failed to ask */
+ (pcre2_config(PCRE2_CONFIG_UNICODE, &have_utf8_pcre))) {
+ have_utf8_pcre = -2; /* erk, failed to ask */
}
return (have_utf8_pcre == 1) && (!strcmp(nl_langinfo(CODESET), "UTF-8"));
@@ -69,115 +69,87 @@ zpcre_utf8_enabled(void)
static int
bin_pcre_compile(char *nam, char **args, Options ops, UNUSED(int func))
{
- int pcre_opts = 0, pcre_errptr, target_len;
- const char *pcre_error;
+ uint32_t pcre_opts = 0;
+ int target_len;
+ int pcre_error;
+ PCRE2_SIZE pcre_offset;
char *target;
- if(OPT_ISSET(ops,'a')) pcre_opts |= PCRE_ANCHORED;
- if(OPT_ISSET(ops,'i')) pcre_opts |= PCRE_CASELESS;
- if(OPT_ISSET(ops,'m')) pcre_opts |= PCRE_MULTILINE;
- if(OPT_ISSET(ops,'x')) pcre_opts |= PCRE_EXTENDED;
- if(OPT_ISSET(ops,'s')) pcre_opts |= PCRE_DOTALL;
+ if (OPT_ISSET(ops, 'a')) pcre_opts |= PCRE2_ANCHORED;
+ if (OPT_ISSET(ops, 'i')) pcre_opts |= PCRE2_CASELESS;
+ if (OPT_ISSET(ops, 'm')) pcre_opts |= PCRE2_MULTILINE;
+ if (OPT_ISSET(ops, 'x')) pcre_opts |= PCRE2_EXTENDED;
+ if (OPT_ISSET(ops, 's')) pcre_opts |= PCRE2_DOTALL;
if (zpcre_utf8_enabled())
- pcre_opts |= PCRE_UTF8;
-
-#ifdef HAVE_PCRE_STUDY
- if (pcre_hints)
-#ifdef PCRE_CONFIG_JIT
- pcre_free_study(pcre_hints);
-#else
- pcre_free(pcre_hints);
-#endif
- pcre_hints = NULL;
-#endif
+ pcre_opts |= PCRE2_UTF;
if (pcre_pattern)
- pcre_free(pcre_pattern);
+ pcre2_code_free(pcre_pattern);
pcre_pattern = NULL;
target = ztrdup(*args);
unmetafy(target, &target_len);
- if ((int)strlen(target) != target_len) {
- zwarnnam(nam, "embedded NULs in PCRE pattern terminate pattern");
- }
-
- pcre_pattern = pcre_compile(target, pcre_opts, &pcre_error, &pcre_errptr, NULL);
+ pcre_pattern = pcre2_compile((PCRE2_SPTR) target, (PCRE2_SIZE) target_len,
+ pcre_opts, &pcre_error, &pcre_offset, NULL);
free(target);
if (pcre_pattern == NULL)
{
- zwarnnam(nam, "error in regex: %s", pcre_error);
+ PCRE2_UCHAR buffer[256];
+ pcre2_get_error_message(pcre_error, buffer, sizeof(buffer));
+ zwarnnam(nam, "error in regex: %s", buffer);
return 1;
}
return 0;
}
-/**/
-#ifdef HAVE_PCRE_STUDY
-
/**/
static int
bin_pcre_study(char *nam, UNUSED(char **args), UNUSED(Options ops), UNUSED(int func))
{
- const char *pcre_error;
-
if (pcre_pattern == NULL)
{
zwarnnam(nam, "no pattern has been compiled for study");
return 1;
}
-
- if (pcre_hints)
-#ifdef PCRE_CONFIG_JIT
- pcre_free_study(pcre_hints);
-#else
- pcre_free(pcre_hints);
-#endif
- pcre_hints = NULL;
- pcre_hints = pcre_study(pcre_pattern, 0, &pcre_error);
- if (pcre_error != NULL)
- {
- zwarnnam(nam, "error while studying regex: %s", pcre_error);
- return 1;
+ int jit = 0;
+ if (!pcre2_config(PCRE2_CONFIG_JIT, &jit) && jit) {
+ if (pcre2_jit_compile(pcre_pattern, PCRE2_JIT_COMPLETE) < 0) {
+ zwarnnam(nam, "error while studying regex");
+ return 1;
+ }
}
return 0;
}
-/**/
-#else /* !HAVE_PCRE_STUDY */
-
-# define bin_pcre_study bin_notavail
-
-/**/
-#endif /* !HAVE_PCRE_STUDY */
-
-/**/
static int
-zpcre_get_substrings(char *arg, int *ovec, int captured_count, char *matchvar,
- char *substravar, int want_offset_pair, int matchedinarr,
- int want_begin_end)
+zpcre_get_substrings(char *arg, pcre2_match_data *mdata, int captured_count,
+ char *matchvar, char *substravar, int want_offset_pair,
+ int matchedinarr, int want_begin_end)
{
- char **captures, *match_all, **matches;
+ PCRE2_SIZE *ovec;
+ char *match_all, **matches;
char offset_all[50];
int capture_start = 1;
if (matchedinarr) {
- /* bash-style captures[0] entire-matched string in the array */
+ /* bash-style ovec[0] entire-matched string in the array */
capture_start = 0;
}
- /* captures[0] will be entire matched string, [1] first substring */
- if (!pcre_get_substring_list(arg, ovec, captured_count, (const char ***)&captures)) {
- int nelem = arrlen(captures)-1;
+ /* ovec[0] will be entire matched string, [1] first substring */
+ ovec = pcre2_get_ovector_pointer(mdata);
+ if (ovec) {
+ int nelem = captured_count - 1;
/* Set to the offsets of the complete match */
if (want_offset_pair) {
- sprintf(offset_all, "%d %d", ovec[0], ovec[1]);
+ sprintf(offset_all, "%ld %ld", ovec[0], ovec[1]);
setsparam("ZPCRE_OP", ztrdup(offset_all));
}
/*
@@ -186,7 +158,7 @@ zpcre_get_substrings(char *arg, int *ovec, int captured_count, char *matchvar,
* ovec is length 2*(1+capture_list_length)
*/
if (matchvar) {
- match_all = metafy(captures[0], ovec[1] - ovec[0], META_DUP);
+ match_all = metafy(arg + ovec[0], ovec[1] - ovec[0], META_DUP);
setsparam(matchvar, match_all);
}
/*
@@ -201,16 +173,12 @@ zpcre_get_substrings(char *arg, int *ovec, int captured_count, char *matchvar,
*/
if (substravar &&
(!want_begin_end || nelem)) {
- char **x, **y;
+ char **x;
int vec_off, i;
- y = &captures[capture_start];
matches = x = (char **) zalloc(sizeof(char *) * (captured_count+1-capture_start));
- for (i = capture_start; i < captured_count; i++, y++) {
+ for (i = capture_start; i < captured_count; i++) {
vec_off = 2*i;
- if (*y)
- *x++ = metafy(*y, ovec[vec_off+1]-ovec[vec_off], META_DUP);
- else
- *x++ = NULL;
+ *x++ = metafy(arg + ovec[vec_off], ovec[vec_off+1]-ovec[vec_off], META_DUP);
}
*x = NULL;
setaparam(substravar, matches);
@@ -247,7 +215,8 @@ zpcre_get_substrings(char *arg, int *ovec, int captured_count, char *matchvar,
setiparam("MEND", offs + !isset(KSHARRAYS) - 1);
if (nelem) {
char **mbegin, **mend, **bptr, **eptr;
- int i, *ipair;
+ int i;
+ size_t *ipair;
bptr = mbegin = zalloc(sizeof(char*)*(nelem+1));
eptr = mend = zalloc(sizeof(char*)*(nelem+1));
@@ -287,8 +256,6 @@ zpcre_get_substrings(char *arg, int *ovec, int captured_count, char *matchvar,
setaparam("mend", mend);
}
}
-
- pcre_free_substring_list((const char **)captures);
}
return 0;
@@ -314,7 +281,8 @@ getposint(char *instr, char *nam)
static int
bin_pcre_match(char *nam, char **args, Options ops, UNUSED(int func))
{
- int ret, capcount, *ovec, ovecsize, c;
+ int ret, c;
+ pcre2_match_data *pcre_mdata = NULL;
char *matched_portion = NULL;
char *plaintext = NULL;
char *receptacle = NULL;
@@ -344,36 +312,30 @@ bin_pcre_match(char *nam, char **args, Options ops, UNUSED(int func))
/* For the entire match, 'Return' the offset byte positions instead of the matched string */
if(OPT_ISSET(ops,'b')) want_offset_pair = 1;
- if ((ret = pcre_fullinfo(pcre_pattern, pcre_hints, PCRE_INFO_CAPTURECOUNT, &capcount)))
- {
- zwarnnam(nam, "error %d in fullinfo", ret);
- return 1;
- }
-
- ovecsize = (capcount+1)*3;
- ovec = zalloc(ovecsize*sizeof(int));
-
plaintext = ztrdup(*args);
unmetafy(plaintext, &subject_len);
if (offset_start > 0 && offset_start >= subject_len)
- ret = PCRE_ERROR_NOMATCH;
- else
- ret = pcre_exec(pcre_pattern, pcre_hints, plaintext, subject_len, offset_start, 0, ovec, ovecsize);
+ ret = PCRE2_ERROR_NOMATCH;
+ else {
+ pcre_mdata = pcre2_match_data_create_from_pattern(pcre_pattern, NULL);
+ ret = pcre2_match(pcre_pattern, (PCRE2_SPTR) plaintext, subject_len,
+ offset_start, 0, pcre_mdata, NULL);
+ }
if (ret==0) return_value = 0;
- else if (ret==PCRE_ERROR_NOMATCH) /* no match */;
+ else if (ret == PCRE2_ERROR_NOMATCH) /* no match */;
else if (ret>0) {
- zpcre_get_substrings(plaintext, ovec, ret, matched_portion, receptacle,
+ zpcre_get_substrings(plaintext, pcre_mdata, ret, matched_portion, receptacle,
want_offset_pair, 0, 0);
return_value = 0;
}
else {
- zwarnnam(nam, "error in pcre_exec [%d]", ret);
+ zwarnnam(nam, "error in pcre2_match [%d]", ret);
}
- if (ovec)
- zfree(ovec, ovecsize*sizeof(int));
+ if (pcre_mdata)
+ pcre2_match_data_free(pcre_mdata);
zsfree(plaintext);
return return_value;
@@ -383,17 +345,19 @@ bin_pcre_match(char *nam, char **args, Options ops, UNUSED(int func))
static int
cond_pcre_match(char **a, int id)
{
- pcre *pcre_pat;
- const char *pcre_err;
+ pcre2_code *pcre_pat = NULL;
+ int pcre_err;
+ PCRE2_SIZE pcre_erroff;
char *lhstr, *rhre, *lhstr_plain, *rhre_plain, *avar, *svar;
- int r = 0, pcre_opts = 0, pcre_errptr, capcnt, *ov, ovsize;
+ int r = 0, pcre_opts = 0;
+ pcre2_match_data *pcre_mdata = NULL;
int lhstr_plain_len, rhre_plain_len;
int return_value = 0;
if (zpcre_utf8_enabled())
- pcre_opts |= PCRE_UTF8;
+ pcre_opts |= PCRE2_UTF;
if (isset(REMATCHPCRE) && !isset(CASEMATCH))
- pcre_opts |= PCRE_CASELESS;
+ pcre_opts |= PCRE2_CASELESS;
lhstr = cond_str(a,0,0);
rhre = cond_str(a,1,0);
@@ -401,9 +365,6 @@ cond_pcre_match(char **a, int id)
rhre_plain = ztrdup(rhre);
unmetafy(lhstr_plain, &lhstr_plain_len);
unmetafy(rhre_plain, &rhre_plain_len);
- pcre_pat = NULL;
- ov = NULL;
- ovsize = 0;
if (isset(BASHREMATCH)) {
svar = NULL;
@@ -415,27 +376,27 @@ cond_pcre_match(char **a, int id)
switch(id) {
case CPCRE_PLAIN:
- if ((int)strlen(rhre_plain) != rhre_plain_len) {
- zwarn("embedded NULs in PCRE pattern terminate pattern");
- }
- pcre_pat = pcre_compile(rhre_plain, pcre_opts, &pcre_err, &pcre_errptr, NULL);
- if (pcre_pat == NULL) {
- zwarn("failed to compile regexp /%s/: %s", rhre, pcre_err);
+ if (!(pcre_pat = pcre2_compile((PCRE2_SPTR) rhre_plain,
+ (PCRE2_SIZE) rhre_plain_len, pcre_opts,
+ &pcre_err, &pcre_erroff, NULL)))
+ {
+ PCRE2_UCHAR buffer[256];
+ pcre2_get_error_message(pcre_err, buffer, sizeof(buffer));
+ zwarn("failed to compile regexp /%s/: %s", rhre, buffer);
break;
}
- pcre_fullinfo(pcre_pat, NULL, PCRE_INFO_CAPTURECOUNT, &capcnt);
- ovsize = (capcnt+1)*3;
- ov = zalloc(ovsize*sizeof(int));
- r = pcre_exec(pcre_pat, NULL, lhstr_plain, lhstr_plain_len, 0, 0, ov, ovsize);
- /* r < 0 => error; r==0 match but not enough size in ov
+ pcre_mdata = pcre2_match_data_create_from_pattern(pcre_pat, NULL);
+ r = pcre2_match(pcre_pat, (PCRE2_SPTR8) lhstr_plain, lhstr_plain_len,
+ 0, 0, pcre_mdata, NULL);
+ /* r < 0 => error; r==0 match but not enough size in match data
* r > 0 => (r-1) substrings found; r==1 => no substrings
*/
if (r==0) {
- zwarn("reportable zsh problem: pcre_exec() returned 0");
+ zwarn("reportable zsh problem: pcre2_match() returned 0");
return_value = 1;
break;
}
- else if (r==PCRE_ERROR_NOMATCH) {
+ else if (r == PCRE2_ERROR_NOMATCH) {
return_value = 0; /* no match */
break;
}
@@ -444,7 +405,7 @@ cond_pcre_match(char **a, int id)
break;
}
else if (r>0) {
- zpcre_get_substrings(lhstr_plain, ov, r, svar, avar, 0,
+ zpcre_get_substrings(lhstr_plain, pcre_mdata, r, svar, avar, 0,
isset(BASHREMATCH),
!isset(BASHREMATCH));
return_value = 1;
@@ -457,10 +418,10 @@ cond_pcre_match(char **a, int id)
free(lhstr_plain);
if(rhre_plain)
free(rhre_plain);
+ if (pcre_mdata)
+ pcre2_match_data_free(pcre_mdata);
if (pcre_pat)
- pcre_free(pcre_pat);
- if (ov)
- zfree(ov, ovsize*sizeof(int));
+ pcre2_code_free(pcre_pat);
return return_value;
}
@@ -489,11 +450,11 @@ static struct builtin bintab[] = {
static struct features module_features = {
bintab, sizeof(bintab)/sizeof(*bintab),
-#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
+#if defined(HAVE_PCRE2_COMPILE_8) && defined(HAVE_PCRE2_H)
cotab, sizeof(cotab)/sizeof(*cotab),
-#else /* !(HAVE_PCRE_COMPILE && HAVE_PCRE_EXEC) */
+#else /* !(HAVE_PCRE2_COMPILE_8 && HAVE_PCRE2_H) */
NULL, 0,
-#endif /* !(HAVE_PCRE_COMPILE && HAVE_PCRE_EXEC) */
+#endif /* !(HAVE_PCRE2_COMPILE_8 && HAVE_PCRE2_H) */
NULL, 0,
NULL, 0,
0
@@ -540,19 +501,9 @@ cleanup_(Module m)
int
finish_(UNUSED(Module m))
{
-#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
-#ifdef HAVE_PCRE_STUDY
- if (pcre_hints)
-#ifdef PCRE_CONFIG_JIT
- pcre_free_study(pcre_hints);
-#else
- pcre_free(pcre_hints);
-#endif
- pcre_hints = NULL;
-#endif
-
+#if defined(HAVE_PCRE2_COMPILE_8) && defined(HAVE_PCRE2_H)
if (pcre_pattern)
- pcre_free(pcre_pattern);
+ pcre2_code_free(pcre_pattern);
pcre_pattern = NULL;
#endif
diff --git a/Test/V07pcre.ztst b/Test/V07pcre.ztst
index 22a0b64c7..6eb366964 100644
--- a/Test/V07pcre.ztst
+++ b/Test/V07pcre.ztst
@@ -117,12 +117,17 @@
>78884; ZPCRE_OP: 25 30
>90210; ZPCRE_OP: 31 36
-# Embedded NULs allowed in plaintext, but not in RE (although \0 as two-chars allowed)
+# Embedded NULs allowed in plaintext, in RE, pcre supports \0 as two-chars
[[ $'a\0bc\0d' =~ '^(a\0.)(.+)$' ]]
print "${#MATCH}; ${#match[1]}; ${#match[2]}"
0:ensure ASCII NUL passes in and out of matched plaintext
>6; 3; 3
+# PCRE2 supports NULs also in the RE
+ [[ $'a\0b\0c' =~ $'^(.\0)+' ]] && print "${#MATCH}; ${#match[1]}"
+0:ensure ASCII NUL works also in the regex
+>4; 2
+
# Ensure the long-form infix operator works
[[ foo -pcre-match ^f..$ ]]
print $?
@@ -169,7 +174,11 @@
[[ é =~ '^..\z' ]]; echo $?
LANG=$LANG_SAVE
[[ é =~ '^.\z' ]]; echo $?
-0:swich between C/UTF-8 locales
+0:switch between C/UTF-8 locales
>0
>0
>0
+
+ [[ abc =~ 'a(d*)bc' ]] && print "$#MATCH; $#match; ${#match[1]}"
+0:empty capture
+>3; 1; 0
diff --git a/configure.ac b/configure.ac
index d8a17791a..4710d1659 100644
--- a/configure.ac
+++ b/configure.ac
@@ -438,7 +438,7 @@ fi],
dnl Do you want to look for pcre support?
AC_ARG_ENABLE(pcre,
-AS_HELP_STRING([--enable-pcre],[enable the search for the pcre library (may create run-time library dependencies)]))
+AS_HELP_STRING([--enable-pcre],[enable the search for the pcre2 library (may create run-time library dependencies)]))
dnl Do you want to look for capability support?
AC_ARG_ENABLE(cap,
@@ -652,13 +652,12 @@ AC_HEADER_SYS_WAIT
oldcflags="$CFLAGS"
if test x$enable_pcre = xyes; then
-AC_CHECK_PROG([PCRECONF], pcre-config, pcre-config)
-dnl Typically (meaning on this single RedHat 9 box in front of me)
-dnl pcre-config --cflags produces a -I output which needs to go into
+AC_CHECK_PROG([PCRECONF], pcre2-config, pcre2-config)
+dnl pcre2-config --cflags may produce a -I output which needs to go into
dnl CPPFLAGS else configure's preprocessor tests don't pick it up,
dnl producing a warning.
-if test "x$ac_cv_prog_PCRECONF" = xpcre-config; then
- CPPFLAGS="$CPPFLAGS `pcre-config --cflags`"
+if test "x$ac_cv_prog_PCRECONF" = xpcre2-config; then
+ CPPFLAGS="$CPPFLAGS `pcre2-config --cflags`"
fi
fi
@@ -668,9 +667,10 @@ AC_CHECK_HEADERS(sys/time.h sys/times.h sys/select.h termcap.h termio.h \
locale.h errno.h stdio.h stdarg.h varargs.h stdlib.h \
unistd.h sys/capability.h \
utmp.h utmpx.h sys/types.h pwd.h grp.h poll.h sys/mman.h \
- netinet/in_systm.h pcre.h langinfo.h wchar.h stddef.h \
+ netinet/in_systm.h langinfo.h wchar.h stddef.h \
sys/stropts.h iconv.h ncurses.h ncursesw/ncurses.h \
ncurses/ncurses.h)
+AC_CHECK_HEADERS([pcre2.h],,,[#define PCRE2_CODE_UNIT_WIDTH 8])
if test x$dynamic = xyes; then
AC_CHECK_HEADERS(dlfcn.h)
AC_CHECK_HEADERS(dl.h)
@@ -948,9 +948,7 @@ if test "x$ac_found_iconv" = "xyes"; then
fi
if test x$enable_pcre = xyes; then
-dnl pcre-config should probably be employed here
-dnl AC_SEARCH_LIBS(pcre_compile, pcre)
- LIBS="`$ac_cv_prog_PCRECONF --libs` $LIBS"
+ LIBS="`$ac_cv_prog_PCRECONF --libs8` $LIBS"
fi
dnl ---------------------
@@ -1313,7 +1311,7 @@ AC_CHECK_FUNCS(strftime strptime mktime timelocal \
pathconf sysconf \
tgetent tigetflag tigetnum tigetstr setupterm initscr resize_term \
getcchar setcchar waddwstr wget_wch win_wch use_default_colors \
- pcre_compile pcre_study pcre_exec \
+ pcre2_compile_8 \
nl_langinfo \
erand48 open_memstream \
posix_openpt \
--
2.41.0
From 10bdbd8b5b0b43445aff23dcd412f25cf6aa328a Mon Sep 17 00:00:00 2001
From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
Date: Tue, 20 Jun 2023 18:14:27 +0900
Subject: [PATCH] 51877: do not build pcre module if pcre2-config is not found
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
---
Src/Modules/pcre.mdd | 2 +-
configure.ac | 31 +++++++++++++++++++------------
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/Src/Modules/pcre.mdd b/Src/Modules/pcre.mdd
index 6eb3c691b..3e1579117 100644
--- a/Src/Modules/pcre.mdd
+++ b/Src/Modules/pcre.mdd
@@ -1,5 +1,5 @@
name=zsh/pcre
-link=`if test x$enable_pcre = xyes && (pcre-config --version >/dev/null 2>/dev/null); then echo dynamic; else echo no; fi`
+link=`if test x$enable_pcre = xyes; then echo dynamic; else echo no; fi`
load=no
autofeatures="b:pcre_compile b:pcre_study b:pcre_match"
diff --git a/configure.ac b/configure.ac
index ba76f9a60..c5263035e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -440,6 +440,17 @@ dnl Do you want to look for pcre support?
AC_ARG_ENABLE(pcre,
AS_HELP_STRING([--enable-pcre],[enable the search for the pcre2 library (may create run-time library dependencies)]))
+AC_ARG_VAR(PCRE_CONFIG, [pathname of pcre2-config if it is not in PATH])
+if test "x$enable_pcre" = xyes; then
+ AC_CHECK_PROG([PCRE_CONFIG], pcre2-config, pcre2-config)
+ if test "x$PCRE_CONFIG" = x; then
+ enable_pcre=no
+ AC_MSG_WARN([pcre2-config not found: pcre module is disabled.])
+ AC_MSG_NOTICE(
+ [Set PCRE_CONFIG to pathname of pcre2-config if it is not in PATH.])
+ fi
+fi
+
dnl Do you want to look for capability support?
AC_ARG_ENABLE(cap,
AS_HELP_STRING([--enable-cap],[enable the search for POSIX capabilities (may require additional headers to be added by hand)]))
@@ -655,15 +666,12 @@ AC_HEADER_DIRENT
AC_HEADER_STAT
AC_HEADER_SYS_WAIT
-oldcflags="$CFLAGS"
-if test x$enable_pcre = xyes; then
-AC_CHECK_PROG([PCRECONF], pcre2-config, pcre2-config)
dnl pcre2-config --cflags may produce a -I output which needs to go into
dnl CPPFLAGS else configure's preprocessor tests don't pick it up,
dnl producing a warning.
-if test "x$ac_cv_prog_PCRECONF" = xpcre2-config; then
- CPPFLAGS="$CPPFLAGS `pcre2-config --cflags`"
-fi
+if test "x$enable_pcre" = xyes; then
+ CPPFLAGS="`$PCRE_CONFIG --cflags` $CPPFLAGS"
+ AC_CHECK_HEADERS([pcre2.h],,,[#define PCRE2_CODE_UNIT_WIDTH 8])
fi
AC_CHECK_HEADERS(sys/time.h sys/times.h sys/select.h termcap.h termio.h \
@@ -675,7 +683,6 @@ AC_CHECK_HEADERS(sys/time.h sys/times.h sys/select.h termcap.h termio.h \
netinet/in_systm.h langinfo.h wchar.h stddef.h \
sys/stropts.h iconv.h ncurses.h ncursesw/ncurses.h \
ncurses/ncurses.h)
-AC_CHECK_HEADERS([pcre2.h],,,[#define PCRE2_CODE_UNIT_WIDTH 8])
if test x$dynamic = xyes; then
AC_CHECK_HEADERS(dlfcn.h)
AC_CHECK_HEADERS(dl.h)
@@ -952,10 +959,6 @@ if test "x$ac_found_iconv" = "xyes"; then
[Define as const if the declaration of iconv() needs const.])
fi
-if test x$enable_pcre = xyes; then
- LIBS="`$ac_cv_prog_PCRECONF --libs8` $LIBS"
-fi
-
dnl ---------------------
dnl CHECK TERMCAP LIBRARY
dnl ---------------------
@@ -1316,7 +1319,6 @@ AC_CHECK_FUNCS(strftime strptime mktime timelocal \
pathconf sysconf \
tgetent tigetflag tigetnum tigetstr setupterm initscr resize_term \
getcchar setcchar waddwstr wget_wch win_wch use_default_colors \
- pcre2_compile_8 \
nl_langinfo \
erand48 open_memstream \
posix_openpt \
@@ -1371,6 +1373,11 @@ if test x$zsh_cv_func_realpath_accepts_null = xyes; then
AC_DEFINE(REALPATH_ACCEPTS_NULL)
fi
+if test x$enable_pcre = xyes; then
+ LIBS="`$PCRE_CONFIG --libs8` $LIBS"
+ AC_CHECK_FUNCS(pcre2_compile_8)
+fi
+
if test x$enable_cap = xyes; then
AC_CHECK_FUNCS(cap_get_proc)
fi
--
2.42.0

View file

@ -1,53 +0,0 @@
From ecd3f9c9506c7720dc6c0833dc5d5eb00e4459c4 Mon Sep 17 00:00:00 2001
From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
Date: Mon, 19 Jun 2023 11:19:25 +0900
Subject: [PATCH] 51862: support texinfo-7.0
Upstream-commit: ecd3f9c9506c7720dc6c0833dc5d5eb00e4459c4
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
---
Doc/Makefile.in | 3 ++-
configure.ac | 5 +++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/Doc/Makefile.in b/Doc/Makefile.in
index 136b080d6..dabe11fe3 100644
--- a/Doc/Makefile.in
+++ b/Doc/Makefile.in
@@ -43,6 +43,7 @@ TEXI2DVI = @TEXI2DVI@
DVIPS = dvips
TEXI2PDF = @TEXI2PDF@
TEXI2HTML = @TEXI2HTML@
+SET_TEXI2ANY_VAR = @SET_TEXI2ANY_VAR@
PAPERSIZE = @PAPERSIZE@
.SUFFIXES: .yo .1
@@ -266,7 +267,7 @@ texi2html.conf: $(sdir_top)/Config/version.mk
d=`echo $(VERSION_DATE)`; \
v="<font size=\"-1\">Zsh version $(VERSION), released on $$d.</font>"; \
case '$(TEXI2HTML)' in \
- *texi2any*) echo "set_from_init_file('PRE_BODY_CLOSE','$$v');" ;; \
+ *texi2any*) echo "$(SET_TEXI2ANY_VAR)('PRE_BODY_CLOSE','$$v');" ;; \
*) echo "\$$PRE_BODY_CLOSE = '$$v';" ;; \
esac > $@
diff --git a/configure.ac b/configure.ac
index 4710d1659..ba76f9a60 100644
--- a/configure.ac
+++ b/configure.ac
@@ -623,7 +623,12 @@ fi
if test x"$TEXI2HTML" = xtexi2any; then
TEXI2HTML='texi2any -c TEXI2HTML=1'
+ case `texi2any --version 2>/dev/null | sed -e 's/^.*) *//' -e 1q` in
+ [[1-6]].*) SET_TEXI2ANY_VAR=set_from_init_file ;;
+ *) SET_TEXI2ANY_VAR=texinfo_set_from_init_file ;;
+ esac
fi
+AC_SUBST(SET_TEXI2ANY_VAR)
case "$LC_PAPER" in
??_US*) PAPERSIZE=us ;;
--
2.42.0

View file

@ -1,44 +0,0 @@
Avoid incompatible pointer types in terminfo global variable checks.
Some compilers reject these incompatible pointer types, causing the
checks to always fail, when these variables are in fact available.
Submitted upstream: <https://www.zsh.org/mla/workers/2023/msg01112.html>
diff --git a/configure.ac b/configure.ac
index a58242f453b4a8f3..5534f42df14eb28c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1769,27 +1769,27 @@ if test x$zsh_cv_path_term_header != xnone; then
fi
AC_MSG_CHECKING(if boolcodes is available)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = boolcodes; puts(*test);]])],[AC_DEFINE(HAVE_BOOLCODES) boolcodes=yes],[boolcodes=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = (char **)boolcodes; puts(*test);]])],[AC_DEFINE(HAVE_BOOLCODES) boolcodes=yes],[boolcodes=no])
AC_MSG_RESULT($boolcodes)
AC_MSG_CHECKING(if numcodes is available)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = numcodes; puts(*test);]])],[AC_DEFINE(HAVE_NUMCODES) numcodes=yes],[numcodes=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = (char **)numcodes; puts(*test);]])],[AC_DEFINE(HAVE_NUMCODES) numcodes=yes],[numcodes=no])
AC_MSG_RESULT($numcodes)
AC_MSG_CHECKING(if strcodes is available)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = strcodes; puts(*test);]])],[AC_DEFINE(HAVE_STRCODES) strcodes=yes],[strcodes=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = (char **)strcodes; puts(*test);]])],[AC_DEFINE(HAVE_STRCODES) strcodes=yes],[strcodes=no])
AC_MSG_RESULT($strcodes)
AC_MSG_CHECKING(if boolnames is available)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = boolnames; puts(*test);]])],[AC_DEFINE(HAVE_BOOLNAMES) boolnames=yes],[boolnames=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = (char **)boolnames; puts(*test);]])],[AC_DEFINE(HAVE_BOOLNAMES) boolnames=yes],[boolnames=no])
AC_MSG_RESULT($boolnames)
AC_MSG_CHECKING(if numnames is available)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = numnames; puts(*test);]])],[AC_DEFINE(HAVE_NUMNAMES) numnames=yes],[numnames=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = (char **)numnames; puts(*test);]])],[AC_DEFINE(HAVE_NUMNAMES) numnames=yes],[numnames=no])
AC_MSG_RESULT($numnames)
AC_MSG_CHECKING(if strnames is available)
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = strnames; puts(*test);]])],[AC_DEFINE(HAVE_STRNAMES) strnames=yes],[strnames=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$term_includes]], [[char **test = (char **)strnames; puts(*test);]])],[AC_DEFINE(HAVE_STRNAMES) strnames=yes],[strnames=no])
AC_MSG_RESULT($strnames)
dnl There are apparently defective terminal library headers on some

View file

@ -1,42 +0,0 @@
From d3edf318306e37d2d96c4e4ea442d10207722e94 Mon Sep 17 00:00:00 2001
From: Bart Schaefer <schaefer@zsh.org>
Date: Sun, 12 Feb 2023 09:52:39 -0800
Subject: [PATCH] 51404: Nullify filelist after deleting (fix segfault)
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
Upstream-commit: d3edf318306e37d2d96c4e4ea442d10207722e94
---
Src/jobs.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/Src/jobs.c b/Src/jobs.c
index 4863962b9..59ddd952e 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -1372,8 +1372,10 @@ cleanfilelists(void)
DPUTS(shell_exiting >= 0, "BUG: cleanfilelists() before exit");
- for (i = 1; i <= maxjob; i++)
+ for (i = 1; i <= maxjob; i++) {
deletefilelist(jobtab[i].filelist, 0);
+ jobtab[i].filelist = 0;
+ }
}
/**/
@@ -1531,8 +1533,10 @@ havefiles(void)
int i;
for (i = 1; i <= maxjob; i++)
- if (jobtab[i].stat && jobtab[i].filelist)
+ if (jobtab[i].stat && jobtab[i].filelist &&
+ peekfirst(jobtab[i].filelist)) {
return 1;
+ }
return 0;
}
--
2.43.0

View file

@ -1,14 +0,0 @@
summary:
Run relevant tests from the shell tests repository
discover:
how: fmf
url: https://src.fedoraproject.org/tests/shell
filter: component:zsh
prepare:
how: install
package: zsh
execute:
how: tmt
environment:
PACKAGES: zsh
SH_BIN: zsh

View file

@ -1,2 +1,2 @@
SHA512 (zsh-5.9.tar.xz) = d9138b7f379ad942a5f46819d2dd52d31f3a1129f2a0d1b53d4c5cd43c318b60396da6d37c57c477b8e958fb750209aca0ae93f8c9dd42ac958de006a0ff067e
SHA512 (zsh-5.9.tar.xz.asc) = b6a72f8dfd2ed9c25e4afa5b3d13b23c1bf0bceacfce3ad0fadf24a9df91382914f7322ef4ed8bfb4b68818fb18fe3973d22154a6cc638b46f02e30bafd93fcb
SHA512 (zsh-5.9.2.tar.xz) = 40bb5eb2cf217e6bcff342fcc9314f082a5d8975abcb56897e86eba5839ddf0ec1ac3feed1e797d4c68cea22228197342916f14bb87309bbcc026a87622bc015
SHA512 (zsh-5.9.2.tar.xz.asc) = 9657c8fef30124e4ea1b4ab41c80b471990c52c362e53f40c9bcca1be1b48af5d19437ecf6a645dbe9ea328d82cc43f9d88ad3835d23d76e482969017a956bf6

View file

@ -4,4 +4,4 @@
#
#
clear
command -v clear &> /dev/null && clear

269
zsh-keyring.asc Normal file
View file

@ -0,0 +1,269 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFwswugBCADdkzua9HwC8Ip5zh7Z0/nJGKbMyq+cobXArhHos40taeidn0+v
HRES5y6PHR+h56c9TpmJEp/bLCHP5pLvcSz/ETz7+Kk82pld63pOHejSxAQCu7Wv
1NwrTu6TyKlZsNG1oZBxx2LkEN6k8Wy+88DlQqZoXOXafmhF+Sms6gv9DXa029sv
B07EehAx02T+b02QwVVG/Pq9austmsTd9EcNcVNRDneD2LcdxCllbS5IamjVa+NW
oeKZVqbsO71uUolwBvshFSBLPsSY8EZdGApjazQcY0lgkaRA/QlMOisyq2mjV6FY
JXHrlI3WWWK2vROjb35AHiHEE/EVgb5RVpxxABEBAAG0E2RhbmEgPGRhbmFAZGFu
YS5pcz6JAU4EEwEIADgWIQR8p+yq8GIWuQ+JQUas+BRsroy7xAUCXCzC6AIbAwUL
CQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCs+BRsroy7xA5XB/93EQqzs0as07U+
gmPDpvE7JwIY4TrcvAS7RHgJ4sE+arR5uTziHixiHBQQMedbfV51Jxgws6WL0Ko8
7K8h9sN2UGnXIc1lWuQ2FDshrcpSHZvLxL4Z7WC3Rj/Dq3/nuZZyljWQNHxg4BlO
EJqe67F5kT2OI591oxB6L1E6F8sVsgxD7gBCPVl/8CsyZ7wkyW/gMRqrlYolJhpS
B5C1zKJzvULQJKXDCh9DUyi7cKFtPyYfYtRWfWhKGz5Dhtt9qvBlxJzZufZ9QNQt
oPhNGF34QaLWTCLRbtoVbNq2NlxalZ5Byhg/0pBcQc2w4C70jSxF3c+2oMEGQIbc
5GJFgLpZuQENBFwswugBCAD5rIYdlLWHOMw+stWTRNquu3SZr+v7RRzreV9fOKN+
lUiqwicU2uCX39s/q+2wtF536r+IS/53DrMAW8sxf8eroK+MBnJYtP3U8BnB3mag
bTJXMjng2ZqZXvxzetXLyXR+38f+6WbJtV0ByDeFQQJYsFxOag3r6etxrzpwRFm0
PL440fc0nxOxhxWWJcR0RKTMX87ymipi9mETYeZi7h9B3cDw8aIUz2O3s45TtNlA
NI1MNMU4sAsc5i+w0zJON9gT+rWDYFj6BiEqnRoSK2XDm+WaJa3FwgW1WnHPTe+E
RJFGT58DICU3ta6cCQPavZz/KALyj8GBJ+PydelIAv2rABEBAAGJATYEGAEIACAW
IQR8p+yq8GIWuQ+JQUas+BRsroy7xAUCXCzC6AIbDAAKCRCs+BRsroy7xOgxB/40
sp9xFq8L/59yRTeXSskOsGk3aUlSnACofcRCGgDSXV5GwWJ/G0O8krhHOISJKuxc
vA0wLFq0WB/EafrKAPTSkrnxmq8noT3c8MpnFRSXHq3sOXkB4nqVEmUu/AAA0TbC
HcwhFQExvK7O+funxIGU5vqHFeQGJ0VcgC/KZUEMNtVV8aZGvn7JzSxEIwHVXGLu
5H7TnNWzLzkzIDVY9IJpTutsc6RMvv6BV8ooWBHSgzmh0MTqEjwNarHAMuffrAjE
zIO3qi0YCaxSDVf2jrWyYpB2QntplmUoubB9s/ngCqVb4A3B7JxPmJuL/0XMUThn
WZLWFpbLimyoUCfHoehZ
=dR/Y
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=KiyE
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
Qg719Q==
=+Fbc
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFZWC4cBCADgb7/oPoCs9SE+/jrzmDT7L+PbYLCygCExxp4mt3CsSzn5xefq
NGU+aBJnvyongcsYrW173GumDjXCG3GBtnmqs3dFeoqnEsSZFMYiQ4ctmWh48P+W
uQVQOWuh0CVS2OCFn37b5F9dy3oF6gJFdqbwOXJSgWMA/+StMGSkslTYFlG/JwZ1
csk9jSwQw/yKDlTiFaqMwIwSXTK5fItSn3F0R+usgMhwRPu8gvK23tmEhnnwgmlR
xfEwJCLqGnvlW74dRkCjY349GAG1IN2felFfHn0ok/Lbx7coKRoEvHaCVbmtPSmX
Ps9axAV97wk37wS1dhEXcjxLb9GIZgptgo7DABEBAAG0LlBldGVyIFN0ZXBoZW5z
b24gPHAudy5zdGVwaGVuc29uQG50bHdvcmxkLmNvbT6JATcEEwEIACEFAlZWC4cC
GwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQpx2anUvbJ7NtaQf/RQ/RLvOG
iI4XJp/C9JIVHfHL7I801uT8V3y/d2+DehFasR9T+6B/Mf5y22NI31i5XBQuK0Wo
Zsi7F3bhNHyeVgO/p5JLBmxohByjL9f7B+k9Tt/DyWh66AVaCoam4ACR8TBOlNkD
p/8U0zzrxE9fQrjjK/PzhpVe97LKScEAu2Zc/qUFp4eTAnlqyosTqvU64+n1PrNC
CtZVYPnL17GCC4+S7yrh34Kllx+fkoHimTL/cUG+6+7sbmpUImpP+pgNEnL1IzBB
ajZRl1581McMGhIH1TBYrEVnIhononoOO7qr1eahUCEhVvanyVTnSeTTVR0VgK4s
joYLwDLM4XidgrkBDQRWVguHAQgA7JTI0botnBMfTAGff4Duoor5m0PuExQFCHcJ
/df5SyUUskycMlGR73+IbcT2D/zBIFDv5ZhCdOdmIW3CHICK+Ws7N5+KSzlzC+Vf
2LMmXuyJLhXeTqXI1ta6bIGjXeh5VA9Jd7B8dRQhCn1OrGbFhwtJSGejTmcWiLJW
+2GV9s44e9MlscMHvAk9QAvqrSUJoAkN3OCdgjcpDNVT8ek3NnjCD4xrBTxCcI1n
KsJeOgNHPkbou9+eHY80amkAkRn2ZSI9n25WjhKAp9QGDNL5wqHLjgHP6WiEwumN
DWPnPd+5FQHQXy1GHgH2BozfT1KZJ012T0Keuk/hnZJ/TVe4gwARAQABiQEfBBgB
CAAJBQJWVguHAhsMAAoJEKcdmp1L2yez1T0H/jitvgACci+5PQG1djYwioQIui4J
1nSg4HxW+4SCpSwlmH2LkKaF3WbjpPTRhYeMZ5zdOvGnjPUZCjGtWkWx0p+Jrpe/
QIC3CNXerX9fpkr0K7+knqkb1RsjHU/YSsYTDDVJpL3BQOZzVocOjPa1YPTfTBU5
tsQdA4RORi15LyAWcEAmR+X3qH2JM5pGP23hhOKnrFSSnfBP6ef1/jjRbfK5yItZ
5DOf6i3WS40zxB67dlBlHZwOQuYA3Sr01hEz4CeAkpV7lQ1gKelm1ZmcFQI6yqcR
PmVjIuxE1A/gTFe6LaAfCGA6/H1H6LLwWQ/rnUi/seMJ6aRkz/05dg7j5+E=
=wOVS
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -0,0 +1,83 @@
From b258cb7816323050d7e485171c92ad3f1046799e Mon Sep 17 00:00:00 2001
From: Mikael Magnusson <mikachu@gmail.com>
Date: Fri, 17 Jul 2026 22:53:21 +0200
Subject: [PATCH] 54985: fix crash with bracketed-paste-magic and undo
In particular, fc -P/-p didn't interact well with undo. Make sure we
store/restore histline across those calls.
(cherry-picked from commit 7708d466dfab8dd29f9ae5de12c74af37bf99a4d)
---
Src/Zle/zle_main.c | 8 ++++++++
Src/hist.c | 7 ++++++-
Src/zsh.h | 3 ++-
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 44ee63d..817e605 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -2168,6 +2168,14 @@ zle_main_entry(int cmd, va_list ap)
break;
}
+ case ZLE_CMD_GET_HIST_LINE:
+ {
+ zlong *p = va_arg(ap, zlong *);
+ *p = histline;
+
+ break;
+ }
+
default:
#ifdef DEBUG
dputs("Bad command %d in zle_main_entry", cmd);
diff --git a/Src/hist.c b/Src/hist.c
index f58db23..85f329c 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -226,6 +226,7 @@ static struct histsave {
HashTable histtab;
Histent hist_ring;
zlong curhist;
+ zlong histline;
zlong histlinect;
zlong histsiz;
zlong savehistsiz;
@@ -3846,6 +3847,10 @@ pushhiststack(char *hf, zlong hs, zlong shs, int level)
h->histsiz = histsiz;
h->savehistsiz = savehistsiz;
h->locallevel = level;
+ if (zleactive)
+ zleentry(ZLE_CMD_GET_HIST_LINE, &h->histline);
+ else
+ h->histline = 0;
memset(&lasthist, 0, sizeof lasthist);
if (hf) {
@@ -3898,7 +3903,7 @@ pophiststack(void)
hist_ring = h->hist_ring;
curhist = h->curhist;
if (zleactive)
- zleentry(ZLE_CMD_SET_HIST_LINE, curhist);
+ zleentry(ZLE_CMD_SET_HIST_LINE, h->histline);
histlinect = h->histlinect;
histsiz = h->histsiz;
savehistsiz = h->savehistsiz;
diff --git a/Src/zsh.h b/Src/zsh.h
index 8fab0eb..32302ec 100644
--- a/Src/zsh.h
+++ b/Src/zsh.h
@@ -3244,7 +3244,8 @@ enum {
ZLE_CMD_REFRESH,
ZLE_CMD_SET_KEYMAP,
ZLE_CMD_GET_KEY,
- ZLE_CMD_SET_HIST_LINE
+ ZLE_CMD_SET_HIST_LINE,
+ ZLE_CMD_GET_HIST_LINE,
};
/***************************************/
--
2.55.0

View file

@ -1,41 +1,33 @@
Summary: Powerful interactive shell
Name: zsh
Version: 5.9
Release: 13%{?dist}
Version: 5.9.2
Release: 3%{?dist}
License: MIT-Modern-Variant AND ISC AND GPL-2.0-only
URL: http://zsh.sourceforge.net/
Source0: https://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.xz
Source1: zlogin.rhs
Source2: zlogout.rhs
Source3: zprofile.rhs
Source4: zshrc.rhs
Source5: zshenv.rhs
Source6: dotzshrc
Source7: dotzprofile
Source1: https://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.xz.asc
Source2: zsh-keyring.asc
# do not use egrep in tests to make them pass again
Patch1: 0001-zsh-5.9-do-not-use-egrep-in-tests.patch
# Upstream commit ab4d62eb975a4c4c51dd35822665050e2ddc6918
Patch2: 0002-zsh-Use-int-main-in-test-c-codes.patch
# upstream commit a84fdd7c8f77935ecce99ff2b0bdba738821ed79
Patch3: 0003-zsh-fix-module-loading-problem-with-full-RELRO.patch
# upstream commit 1b421e4978440234fb73117c8505dad1ccc68d46
Patch4: 0004-zsh-enable-PCRE-locale-switching.patch
# upstream commit b62e911341c8ec7446378b477c47da4256053dc0 and 10bdbd8b5b0b43445aff23dcd412f25cf6aa328a
Patch5: 0005-zsh-port-to-pcre2.patch
# upstream commit ecd3f9c9506c7720dc6c0833dc5d5eb00e4459c4
Patch6: 0006-zsh-support-texinfo-7.0.patch
# upstream commit 4c89849c98172c951a9def3690e8647dae76308f
Patch7: 0007-zsh-configure-c99.patch
# upstream commit d3edf318306e37d2d96c4e4ea442d10207722e94
Patch8: 0008-zsh-deletefilelist-segfault.patch
Source3: zlogin.rhs
Source4: zlogout.rhs
Source5: zprofile.rhs
Source6: zshrc.rhs
Source7: zshenv.rhs
Source8: dotzshrc
Source9: dotzprofile
# https://sourceforge.net/p/zsh/code/ci/7708d466dfab8dd29f9ae5de12c74af37bf99a4d/
# fix crash with bracketed-paste-magic and undo (rhbz#2484692)
Patch: zsh-memcpy-sigsegv-bracketed-paste.patch
BuildRequires: autoconf
BuildRequires: coreutils
BuildRequires: gawk
BuildRequires: gcc
BuildRequires: gdbm-devel
BuildRequires: glibc-langpack-ja
BuildRequires: gpgverify
BuildRequires: groff
BuildRequires: hostname
BuildRequires: libcap-devel
BuildRequires: make
BuildRequires: ncurses-devel
@ -46,14 +38,6 @@ BuildRequires: texinfo
Requires(post): grep
Requires(postun): coreutils grep
# the hostname package is not available on RHEL-6
%if 12 < 0%{?fedora} || 6 < 0%{?rhel}
BuildRequires: hostname
%else
# /bin and /usr/bin are separate directories on RHEL-6
%define _bindir /bin
%endif
Provides: /bin/zsh
%description
@ -66,7 +50,7 @@ mechanism, and more.
%package html
Summary: Zsh shell manual in html format
BuildArch: noarch
BuildArch: noarch
%description html
The zsh shell is a command interpreter usable as an interactive login
@ -79,8 +63,8 @@ mechanism, and more.
This package contains the Zsh manual in html format.
%prep
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%autosetup -p1
autoreconf -fiv
# enable parallel build
sed -e 's|^\.NOTPARALLEL|#.NOTPARALLEL|' -i 'Config/defs.mk.in'
@ -123,13 +107,13 @@ rm -f $RPM_BUILD_ROOT%{_bindir}/zsh-%{version}
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}
for i in %{SOURCE1} %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5}; do
for i in %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{SOURCE7}; do
install -m 644 $i $RPM_BUILD_ROOT%{_sysconfdir}/"$(basename $i .rhs)"
done
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/skel
install -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_sysconfdir}/skel/.zshrc
install -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/skel/.zprofile
install -m 644 %{SOURCE8} $RPM_BUILD_ROOT%{_sysconfdir}/skel/.zshrc
install -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{_sysconfdir}/skel/.zprofile
# This is just here to shut up rpmlint, and is very annoying.
# Note that we can't chmod everything as then rpmlint will complain about
@ -174,11 +158,44 @@ fi
%doc Doc/*.html
%changelog
* Wed Jul 22 2026 Lukáš Zaoral <lzaoral@redhat.com> - 5.9.2-3
- fix crash with bracketed-paste-magic and undo (rhbz#2484692)
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.9.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Mon Jul 13 2026 Lukáš Zaoral <lzaoral@redhat.com> - 5.9.2-1
- rebase to the latest upstream release (rhbz#2499540)
* Thu Jun 04 2026 Lukáš Zaoral <lzaoral@redhat.com> - 5.9.1-1
- rebase to the latest upstream release (rhbz#2483668)
* Tue Mar 24 2026 Lukáš Zaoral <lzaoral@redhat.com> - 5.9-20
- fix segfault in _IO_putc (rhbz#2449939)
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.9-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Mon Sep 29 2025 Christoph Erhardt <fedora@sicherha.de> - 5.9-18
- Add completion support for dnf5
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.9-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.9-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.9-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Mon May 13 2024 Lukáš Zaoral <lzaoral@redhat.com> - 5.9-14
- fix zlogout when ncurses is not installed (rhbz#2279741)
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.9-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jan 17 2024 Lukáš Zaoral <lzaoral@redhat.com> - 5.9-12
- fix segfault in delerefilelist (rhbz#2245462)
- fix segfault in deletefilelist (rhbz#2245462)
* Fri Dec 8 2023 Florian Weimer <fweimer@redhat.com> - 5.9-11
- Fix C compatibility issue in the configure script