SHA256
1
0
forked from pool/tcsh

Accepting request 727010 from shells

Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/727010
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/tcsh?expand=0&rev=64
This commit is contained in:
Dominique Leuenberger 2019-09-02 11:21:58 +00:00 committed by Git OBS Bridge
commit b77186d5f1
5 changed files with 81 additions and 18 deletions

View File

@ -4,7 +4,7 @@
--- sh.hist.c --- sh.hist.c
+++ sh.hist.c 2017-07-19 10:01:20.795354927 +0000 +++ sh.hist.c 2017-07-19 10:01:20.795354927 +0000
@@ -1274,6 +1274,11 @@ rechist(Char *fname, int ref) @@ -1278,6 +1278,11 @@ rechist(Char *fname, int ref)
} }
if (merge) { if (merge) {
@ -16,7 +16,7 @@
if (lock) { if (lock) {
#ifndef WINNT_NATIVE #ifndef WINNT_NATIVE
char *lockpath = strsave(short2str(fname)); char *lockpath = strsave(short2str(fname));
@@ -1283,6 +1288,7 @@ rechist(Char *fname, int ref) @@ -1287,6 +1292,7 @@ rechist(Char *fname, int ref)
cleanup_push(lockpath, dotlock_cleanup); cleanup_push(lockpath, dotlock_cleanup);
#endif #endif
} }

View File

@ -14,18 +14,18 @@ https://bugzilla.redhat.com/show_bug.cgi?id=879371
Changes by Fridolin Pokorny <fpokorny@redhat.com> Changes by Fridolin Pokorny <fpokorny@redhat.com>
--- ---
sh.c | 102 ++++++++++++++++++++++++++++++++++++------------- sh.c | 102 ++++++++++++++++++++++++++++++++++++------------
sh.decls.h | 4 + sh.decls.h | 4 +
sh.dol.c | 2 sh.dol.c | 2
sh.err.c | 16 +++++++ sh.err.c | 16 +++++++
sh.h | 18 ++++++++ sh.h | 18 ++++++++
sh.hist.c | 126 +++++++++++++++++++++++++++++-------------------------------- sh.hist.c | 127 ++++++++++++++++++++++++++++---------------------------------
sh.lex.c | 8 +-- sh.lex.c | 8 +--
sh.sem.c | 2 sh.sem.c | 2
8 files changed, 178 insertions(+), 100 deletions(-) 8 files changed, 178 insertions(+), 101 deletions(-)
--- sh.c --- sh.c
+++ sh.c 2019-05-09 08:16:41.673852638 +0000 +++ sh.c 2019-08-22 13:02:31.780361102 +0000
@@ -138,6 +138,7 @@ struct saved_state { @@ -138,6 +138,7 @@ struct saved_state {
int cantell; int cantell;
struct Bin B; struct Bin B;
@ -245,7 +245,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
/* /*
--- sh.decls.h --- sh.decls.h
+++ sh.decls.h 2019-05-09 08:16:41.673852638 +0000 +++ sh.decls.h 2019-08-22 13:02:31.780361102 +0000
@@ -37,6 +37,7 @@ @@ -37,6 +37,7 @@
*/ */
extern Char *gethdir (const Char *); extern Char *gethdir (const Char *);
@ -272,7 +272,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
extern void sethistory (int); extern void sethistory (int);
--- sh.dol.c --- sh.dol.c
+++ sh.dol.c 2019-05-09 08:16:41.673852638 +0000 +++ sh.dol.c 2019-08-22 13:02:31.780361102 +0000
@@ -1117,6 +1117,6 @@ again: @@ -1117,6 +1117,6 @@ again:
*obp = 0; *obp = 0;
tmp = short2str(obuf); tmp = short2str(obuf);
@ -282,7 +282,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
cleanup_until(&inheredoc); cleanup_until(&inheredoc);
} }
--- sh.err.c --- sh.err.c
+++ sh.err.c 2019-05-09 08:16:41.677852563 +0000 +++ sh.err.c 2019-08-22 13:02:31.780361102 +0000
@@ -511,6 +511,22 @@ open_cleanup(void *xptr) @@ -511,6 +511,22 @@ open_cleanup(void *xptr)
} }
@ -307,7 +307,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
{ {
DIR *dir; DIR *dir;
--- sh.h --- sh.h
+++ sh.h 2019-05-09 08:16:41.677852563 +0000 +++ sh.h 2019-08-22 13:02:31.784361027 +0000
@@ -49,6 +49,24 @@ @@ -49,6 +49,24 @@
# include <inttypes.h> # include <inttypes.h>
#endif #endif
@ -334,7 +334,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
typedef unsigned long intptr_t; typedef unsigned long intptr_t;
#endif #endif
--- sh.hist.c --- sh.hist.c
+++ sh.hist.c 2019-05-09 08:36:00.679789483 +0000 +++ sh.hist.c 2019-08-22 13:02:44.684119766 +0000
@@ -32,6 +32,8 @@ @@ -32,6 +32,8 @@
#include "sh.h" #include "sh.h"
#include <stdio.h> /* for rename(2), grr. */ #include <stdio.h> /* for rename(2), grr. */
@ -531,15 +531,15 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
rechist(Char *fname, int ref) rechist(Char *fname, int ref)
{ {
- Char *snum, *rs; - Char *snum, *rs;
- int fp, ftmp, oldidfds; - int fp, ftmp, oldidfds, phup_disabled_tmp;
+ Char *snum; + Char *snum;
+ int fd = -1, ftmp, oldidfds; + int fd = -1, ftmp, oldidfds, phup_disabled_tmp;
struct varent *shist; struct varent *shist;
- char path[MAXPATHLEN]; - char path[MAXPATHLEN];
struct stat st; struct stat st;
static Char *dumphist[] = {STRhistory, STRmhT, 0, 0}; static Char *dumphist[] = {STRhistory, STRmhT, 0, 0};
@@ -1290,50 +1283,49 @@ rechist(Char *fname, int ref) @@ -1294,52 +1287,50 @@ rechist(Char *fname, int ref)
cleanup_push(lockpath, dotlock_cleanup); cleanup_push(lockpath, dotlock_cleanup);
#endif #endif
} }
@ -561,6 +561,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
- if (fp == -1) { - if (fp == -1) {
- didfds = oldidfds; - didfds = oldidfds;
- cleanup_until(fname); - cleanup_until(fname);
- phup_disabled = phup_disabled_tmp;
- return; - return;
+ if (fd <= 0) { + if (fd <= 0) {
+ /* Open .history file for writing (if not open yet). */ + /* Open .history file for writing (if not open yet). */
@ -599,6 +600,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
- (void)ReplaceFile( short2str(fname),path,NULL,0,NULL,NULL); - (void)ReplaceFile( short2str(fname),path,NULL,0,NULL,NULL);
-#endif -#endif
cleanup_until(fname); cleanup_until(fname);
phup_disabled = phup_disabled_tmp;
} }
@ -615,7 +617,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
if (fname != NULL) if (fname != NULL)
loadhist_cmd[2] = fname; loadhist_cmd[2] = fname;
@@ -1342,17 +1334,19 @@ loadhist(Char *fname, int mflg) @@ -1348,17 +1339,19 @@ loadhist(Char *fname, int mflg)
else else
loadhist_cmd[2] = STRtildothist; loadhist_cmd[2] = STRtildothist;
@ -640,7 +642,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
void void
--- sh.lex.c --- sh.lex.c
+++ sh.lex.c 2019-05-09 08:16:41.677852563 +0000 +++ sh.lex.c 2019-08-22 13:02:31.784361027 +0000
@@ -1608,7 +1608,7 @@ wide_read(int fildes, Char *buf, size_t @@ -1608,7 +1608,7 @@ wide_read(int fildes, Char *buf, size_t
/* Throwing away possible partial multibyte characters on error if the /* Throwing away possible partial multibyte characters on error if the
stream is not seekable */ stream is not seekable */
@ -678,7 +680,7 @@ Changes by Fridolin Pokorny <fpokorny@redhat.com>
fbuf = xcalloc(2, sizeof(Char **)); fbuf = xcalloc(2, sizeof(Char **));
fblocks = 1; fblocks = 1;
--- sh.sem.c --- sh.sem.c
+++ sh.sem.c 2019-05-09 08:16:41.677852563 +0000 +++ sh.sem.c 2019-08-22 13:02:31.784361027 +0000
@@ -905,7 +905,7 @@ doio(struct command *t, int *pipein, int @@ -905,7 +905,7 @@ doio(struct command *t, int *pipein, int
fd = xopen(tmp, O_WRONLY|O_APPEND|O_LARGEFILE); fd = xopen(tmp, O_WRONLY|O_APPEND|O_LARGEFILE);
#else /* !O_APPEND */ #else /* !O_APPEND */

View File

@ -0,0 +1,50 @@
tcsh can deadlock with itself if savehist is confgured with "merge" and
"lock", and two SIGHUPs are received in rapid succession. The
mechanism of the deadlock is the first SIGHUP triggers a rechist() and
while that rechist() is executing (and after it has created the lock
file), another SIGHUP triggers a another rechist() which then waits
forever for the lock the the first rechist() created to be released
(which will never happen).
---
tcsh-6.21.00/sh.hist.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
--- tcsh-6.21.00/sh.hist.c
+++ tcsh-6.21.00/sh.hist.c 2019-08-22 12:05:25.800474245 +0000
@@ -1219,7 +1219,7 @@ void
rechist(Char *fname, int ref)
{
Char *snum, *rs;
- int fp, ftmp, oldidfds;
+ int fp, ftmp, oldidfds, phup_disabled_tmp;
struct varent *shist;
char path[MAXPATHLEN];
struct stat st;
@@ -1227,6 +1227,10 @@ rechist(Char *fname, int ref)
if (fname == NULL && !ref)
return;
+
+ phup_disabled_tmp = phup_disabled;
+ phup_disabled = 1;
+
/*
* If $savehist is just set, we use the value of $history
* else we use the value in $savehist
@@ -1301,6 +1305,7 @@ rechist(Char *fname, int ref)
if (fp == -1) {
didfds = oldidfds;
cleanup_until(fname);
+ phup_disabled = phup_disabled_tmp;
return;
}
/* Try to preserve ownership and permissions of the original history file */
@@ -1325,6 +1330,7 @@ rechist(Char *fname, int ref)
(void)ReplaceFile( short2str(fname),path,NULL,0,NULL,NULL);
#endif
cleanup_until(fname);
+ phup_disabled = phup_disabled_tmp;
}

View File

@ -1,3 +1,11 @@
-------------------------------------------------------------------
Thu Aug 22 12:27:18 UTC 2019 - Dr. Werner Fink <werner@suse.de>
- Add patch tcsh-6.21.00-sighup-deadlock.patch from upstream list
* Do not (re)run SIGHUP handler during rewrite history
* Port and rename patch tcsh-6.18.03-history-file-locking.patch
which now becomes tcsh-6.21.0-history-file-locking.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Thu May 9 08:50:56 UTC 2019 - Dr. Werner Fink <werner@suse.de> Thu May 9 08:50:56 UTC 2019 - Dr. Werner Fink <werner@suse.de>

View File

@ -32,8 +32,10 @@ Patch2: tcsh-6.16.00-norm-cmd.dif
Patch4: tcsh-6.18.03-colorls.dif Patch4: tcsh-6.18.03-colorls.dif
Patch5: tcsh-6.17.06-dspmbyte.dif Patch5: tcsh-6.17.06-dspmbyte.dif
Patch6: tcsh-6.18.03-catalogs.dif Patch6: tcsh-6.18.03-catalogs.dif
# PATCH-FIX-UPSTREAM Do not (re)run SIGHUP handler during rewrite history
Patch7: tcsh-6.21.00-sighup-deadlock.patch
# PATCH-FIX-SUSE add history file locking (bsc#901076) # PATCH-FIX-SUSE add history file locking (bsc#901076)
Patch9: tcsh-6.18.03-history-file-locking.patch Patch9: tcsh-6.21.0-history-file-locking.patch
Patch10: tcsh-6.18.03-history-merge.dif Patch10: tcsh-6.18.03-history-merge.dif
# PATCH-FIX-SUSE fix history file locking: first unlock then close # PATCH-FIX-SUSE fix history file locking: first unlock then close
Patch11: tcsh-6.19.00-history-file-locking-order.patch Patch11: tcsh-6.19.00-history-file-locking-order.patch
@ -64,6 +66,7 @@ correction, a history mechanism, job control, and a C-like syntax.
%patch4 -b .colorls %patch4 -b .colorls
%patch5 -b .dspmbyte %patch5 -b .dspmbyte
%patch6 -b .catalogs %patch6 -b .catalogs
%patch7 -p1 -b .sighup
%patch9 -b .histlock %patch9 -b .histlock
%patch10 -b .histmerg %patch10 -b .histmerg
%patch11 -b .histlckord %patch11 -b .histlckord