add missing patches
This commit is contained in:
parent
d92eec91a3
commit
3b3638b811
33
ksh-20120801-alarmifs.patch
Normal file
33
ksh-20120801-alarmifs.patch
Normal file
@ -0,0 +1,33 @@
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/init.c 2014-12-10 20:11:17.693446084 -0200
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2014-12-10 20:11:24.753442619 -0200
|
||||
@@ -576,6 +576,7 @@ static char* get_ifs(register Namval_t*
|
||||
shp->ifstable[' '] = shp->ifstable['\t'] = S_SPACE;
|
||||
shp->ifstable['\n'] = S_NL;
|
||||
}
|
||||
+ shp->ifstable[0] = S_EOF;
|
||||
}
|
||||
return(value);
|
||||
}
|
||||
--- ksh-20120801/src/cmd/ksh93/bltins/alarm.c 2014-12-18 12:03:39.198461933 -0200
|
||||
+++ ksh-20120801/src/cmd/ksh93/bltins/alarm.c 2014-12-18 12:04:32.464421268 -0200
|
||||
@@ -130,6 +130,7 @@ void sh_timetraps(Shell_t *shp)
|
||||
{
|
||||
register struct tevent *tp, *tpnext;
|
||||
register struct tevent *tptop;
|
||||
+ char ifstable[256];
|
||||
while(1)
|
||||
{
|
||||
shp->sigflag[SIGALRM] &= ~SH_SIGALRM;
|
||||
@@ -141,7 +142,11 @@ void sh_timetraps(Shell_t *shp)
|
||||
{
|
||||
tp->flags &= ~L_FLAG;
|
||||
if(tp->action)
|
||||
+ {
|
||||
+ memcpy(ifstable,shp->ifstable,sizeof(ifstable));
|
||||
sh_fun(tp->action,tp->node,(char**)0);
|
||||
+ memcpy(shp->ifstable,ifstable,sizeof(ifstable));
|
||||
+ }
|
||||
tp->flags &= ~L_FLAG;
|
||||
if(!tp->flags)
|
||||
{
|
||||
|
20
ksh-20120801-assoc-unset-leak.patch
Normal file
20
ksh-20120801-assoc-unset-leak.patch
Normal file
@ -0,0 +1,20 @@
|
||||
diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.orig ksh-20120801/src/cmd/ksh93/sh/name.c
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/name.c.orig 2015-02-10 17:15:37.180783550 -0200
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/name.c 2015-02-10 18:25:51.726228437 -0200
|
||||
@@ -1298,7 +1298,16 @@ void nv_delete(Namval_t* np, Dt_t *root,
|
||||
if(dtdelete(root,np))
|
||||
{
|
||||
if(!(flags&NV_NOFREE) && ((flags&NV_FUNCTION) || !nv_subsaved(np,flags&NV_TABLE)))
|
||||
+ {
|
||||
+ Namarr_t *ap;
|
||||
+ if(nv_isarray(np) && np->nvfun && (ap=nv_arrayptr(np)) && array_assoc(ap)) {
|
||||
+ while(nv_associative(np,0,NV_ANEXT))
|
||||
+ nv_associative(np, 0, NV_ADELETE);
|
||||
+ nv_associative(np, 0, NV_AFREE);
|
||||
+ free((void*)np->nvfun);
|
||||
+ }
|
||||
free((void*)np);
|
||||
+ }
|
||||
}
|
||||
#if 0
|
||||
else
|
40
ksh-20120801-cdfork.patch
Normal file
40
ksh-20120801-cdfork.patch
Normal file
@ -0,0 +1,40 @@
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/path.c 2014-09-01 15:08:06.738969962 -0300
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/path.c 2014-09-01 15:13:51.321459978 -0300
|
||||
@@ -229,13 +229,12 @@ static pid_t path_xargs(Shell_t *shp,con
|
||||
/*
|
||||
* make sure PWD is set up correctly
|
||||
* Return the present working directory
|
||||
- * Invokes getcwd() if flag==0 and if necessary
|
||||
+ * Invokes getcwd() if necessary
|
||||
* Sets the PWD variable to this value
|
||||
*/
|
||||
char *path_pwd(Shell_t *shp,int flag)
|
||||
{
|
||||
register char *cp;
|
||||
- register char *dfault = (char*)e_dot;
|
||||
register int count = 0;
|
||||
if(shp->pwd)
|
||||
return((char*)shp->pwd);
|
||||
@@ -254,11 +253,6 @@ char *path_pwd(Shell_t *shp,int flag)
|
||||
cp = "/";
|
||||
break;
|
||||
case 3:
|
||||
- cp = (char*)e_crondir;
|
||||
- if(flag) /* skip next case when non-zero flag */
|
||||
- ++count;
|
||||
- break;
|
||||
- case 4:
|
||||
{
|
||||
if(cp=getcwd(NIL(char*),0))
|
||||
{
|
||||
@@ -269,8 +263,8 @@ char *path_pwd(Shell_t *shp,int flag)
|
||||
}
|
||||
break;
|
||||
}
|
||||
- case 5:
|
||||
+ case 4:
|
||||
- return(dfault);
|
||||
+ return((char*)e_dot);
|
||||
}
|
||||
if(cp && *cp=='/' && test_inode(cp,e_dot))
|
||||
break;
|
11
ksh-20120801-emptyarrayinit.patch
Normal file
11
ksh-20120801-emptyarrayinit.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/array.c 2014-12-11 16:39:34.253860675 -0200
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/array.c 2014-12-11 16:39:40.794857083 -0200
|
||||
@@ -1003,7 +1003,7 @@ Namarr_t *nv_setarray(Namval_t *np, void
|
||||
ap->nelem = nelem;
|
||||
ap->fun = fun;
|
||||
nv_onattr(np,NV_ARRAY);
|
||||
- if(fp || value)
|
||||
+ if(fp || (value && value != Empty))
|
||||
{
|
||||
nv_putsub(np, "0", ARRAY_ADD);
|
||||
if(value)
|
40
ksh-20120801-noexeccdfix.patch
Normal file
40
ksh-20120801-noexeccdfix.patch
Normal file
@ -0,0 +1,40 @@
|
||||
From b8260293a8ed7849a358291faae7b58f4a05dcc9 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 10 Nov 2014 18:23:34 +0100
|
||||
Subject: [PATCH] Resolves: #1160923 - handle failure of fchdir()
|
||||
|
||||
... and chdir()
|
||||
---
|
||||
src/cmd/ksh93/bltins/cd_pwd.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cmd/ksh93/bltins/cd_pwd.c b/src/cmd/ksh93/bltins/cd_pwd.c
|
||||
index a972da6..c20959c 100644
|
||||
--- a/src/cmd/ksh93/bltins/cd_pwd.c
|
||||
+++ b/src/cmd/ksh93/bltins/cd_pwd.c
|
||||
@@ -329,18 +329,20 @@ int b_cd(int argc, char *argv[],Shbltin_t *context)
|
||||
if(newdirfd >=0)
|
||||
{
|
||||
/* chdir for directories on HSM/tapeworms may take minutes */
|
||||
- if(fchdir(newdirfd) >= 0)
|
||||
+ if((rval=fchdir(newdirfd)) >= 0)
|
||||
{
|
||||
if(shp->pwdfd >= 0)
|
||||
sh_close(shp->pwdfd);
|
||||
shp->pwdfd=newdirfd;
|
||||
goto success;
|
||||
}
|
||||
+ else
|
||||
+ sh_close(newdirfd);
|
||||
}
|
||||
#ifndef O_SEARCH
|
||||
else
|
||||
{
|
||||
- if(chdir(dir) >=0)
|
||||
+ if((rval=chdir(dir)) >=0)
|
||||
{
|
||||
if(shp->pwdfd >= 0)
|
||||
{
|
||||
--
|
||||
2.1.0
|
||||
|
95
ksh-20120801-oldenvinit.patch
Normal file
95
ksh-20120801-oldenvinit.patch
Normal file
@ -0,0 +1,95 @@
|
||||
diff -up ksh-20120801/src/cmd/ksh93/sh/init.c.fixset ksh-20120801/src/cmd/ksh93/sh/init.c
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/init.c.fixset 2014-11-03 15:45:36.510997271 +0100
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/init.c 2014-11-03 16:20:44.398917280 +0100
|
||||
@@ -2003,8 +2003,91 @@ static Dt_t *inittree(Shell_t *shp,const
|
||||
* skip over items that are not name-value pairs
|
||||
*/
|
||||
|
||||
+
|
||||
static void env_init(Shell_t *shp)
|
||||
{
|
||||
+ register char *cp;
|
||||
+ register Namval_t *np;
|
||||
+ register char **ep=environ;
|
||||
+ register char *next=0;
|
||||
+#ifdef _ENV_H
|
||||
+ shp->env = env_open(environ,3);
|
||||
+ env_delete(shp->env,"_");
|
||||
+#endif
|
||||
+ if(ep)
|
||||
+ {
|
||||
+ while(cp= *ep++)
|
||||
+ {
|
||||
+ if(*cp=='A' && cp[1]=='_' && cp[2]=='_' && cp[3]=='z' && cp[4]=='=')
|
||||
+ next = cp+4;
|
||||
+ else if(np=nv_open(cp,shp->var_tree,(NV_EXPORT|NV_IDENT|NV_ASSIGN|NV_NOFAIL)))
|
||||
+ {
|
||||
+ nv_onattr(np,NV_IMPORT);
|
||||
+ np->nvenv = cp;
|
||||
+ nv_close(np);
|
||||
+ }
|
||||
+ else /* swap with front */
|
||||
+ {
|
||||
+ ep[-1] = environ[shp->nenv];
|
||||
+ environ[shp->nenv++] = cp;
|
||||
+ }
|
||||
+ }
|
||||
+ while(cp=next)
|
||||
+ {
|
||||
+ if(next = strchr(++cp,'='))
|
||||
+ *next = 0;
|
||||
+ np = nv_search(cp+2,shp->var_tree,NV_ADD);
|
||||
+ if(np!=SHLVL && nv_isattr(np,NV_IMPORT|NV_EXPORT))
|
||||
+ {
|
||||
+ int flag = *(unsigned char*)cp-' ';
|
||||
+ int size = *(unsigned char*)(cp+1)-' ';
|
||||
+ if((flag&NV_INTEGER) && size==0)
|
||||
+ {
|
||||
+ /* check for floating*/
|
||||
+ char *ep,*val = nv_getval(np);
|
||||
+ strtol(val,&ep,10);
|
||||
+ if(*ep=='.' || *ep=='e' || *ep=='E')
|
||||
+ {
|
||||
+ char *lp;
|
||||
+ flag |= NV_DOUBLE;
|
||||
+ if(*ep=='.')
|
||||
+ {
|
||||
+ strtol(ep+1,&lp,10);
|
||||
+ if(*lp)
|
||||
+ ep = lp;
|
||||
+ }
|
||||
+ if(*ep && *ep!='.')
|
||||
+ {
|
||||
+ flag |= NV_EXPNOTE;
|
||||
+ size = ep-val;
|
||||
+ }
|
||||
+ else
|
||||
+ size = strlen(ep);
|
||||
+ size--;
|
||||
+ }
|
||||
+ }
|
||||
+ nv_newattr(np,flag|NV_IMPORT|NV_EXPORT,size);
|
||||
+ }
|
||||
+ else
|
||||
+ cp += 2;
|
||||
+ }
|
||||
+ }
|
||||
+#ifdef _ENV_H
|
||||
+ env_delete(shp->env,e_envmarker);
|
||||
+#endif
|
||||
+ if(nv_isnull(PWDNOD) || nv_isattr(PWDNOD,NV_TAGGED))
|
||||
+ {
|
||||
+ nv_offattr(PWDNOD,NV_TAGGED);
|
||||
+ path_pwd(shp,0);
|
||||
+ }
|
||||
+ if((cp = nv_getval(SHELLNOD)) && (sh_type(cp)&SH_TYPE_RESTRICTED))
|
||||
+ sh_onoption(SH_RESTRICTED); /* restricted shell */
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void env_init_backup(Shell_t *shp)
|
||||
+{
|
||||
register char *cp;
|
||||
register Namval_t *np,*mp;
|
||||
register char **ep=environ;
|
20
ksh-20120801-retfix.patch
Normal file
20
ksh-20120801-retfix.patch
Normal file
@ -0,0 +1,20 @@
|
||||
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.retfix ksh-20120801/src/cmd/ksh93/sh/subshell.c
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.retfix 2014-09-01 13:50:02.956085721 +0200
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-09-01 13:54:01.104818416 +0200
|
||||
@@ -652,6 +652,16 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
||||
}
|
||||
else
|
||||
{
|
||||
+ if(comsub!=1 && shp->spid)
|
||||
+ {
|
||||
+ int c = shp->exitval;
|
||||
+ job_wait(shp->spid);
|
||||
+ shp->exitval = c;
|
||||
+ exitset();
|
||||
+ if(shp->pipepid==shp->spid)
|
||||
+ shp->spid = 0;
|
||||
+ shp->pipepid = 0;
|
||||
+ }
|
||||
job.hack1_waitall=0;
|
||||
/* move tmp file to iop and restore sfstdout */
|
||||
iop = sfswap(sfstdout,NIL(Sfio_t*));
|
47
ksh-20120801-trapcom.patch
Normal file
47
ksh-20120801-trapcom.patch
Normal file
@ -0,0 +1,47 @@
|
||||
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig ksh-20120801/src/cmd/ksh93/sh/subshell.c
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig 2014-08-23 20:20:24.676186573 -0300
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-08-23 20:29:00.772151283 -0300
|
||||
@@ -481,12 +481,12 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
||||
{
|
||||
struct subshell sub_data;
|
||||
register struct subshell *sp = &sub_data;
|
||||
- int jmpval,nsig=0,duped=0;
|
||||
+ int jmpval,isig,nsig=0,duped=0;
|
||||
long savecurenv = shp->curenv;
|
||||
int savejobpgid = job.curpgid;
|
||||
int *saveexitval = job.exitval;
|
||||
int16_t subshell;
|
||||
- char *savsig;
|
||||
+ char **savsig;
|
||||
Sfio_t *iop=0;
|
||||
struct checkpt buff;
|
||||
struct sh_scoped savst;
|
||||
@@ -561,10 +561,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
||||
/* save trap table */
|
||||
shp->st.otrapcom = 0;
|
||||
shp->st.otrap = savst.trap;
|
||||
- if((nsig=shp->st.trapmax*sizeof(char*))>0 || shp->st.trapcom[0])
|
||||
+ if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
|
||||
{
|
||||
- nsig += sizeof(char*);
|
||||
- memcpy(savsig=malloc(nsig),(char*)&shp->st.trapcom[0],nsig);
|
||||
+ ++nsig;
|
||||
+ savsig = malloc(nsig * sizeof(char*));
|
||||
+ /* contents of shp->st.st.trapcom may change */
|
||||
+ for (isig = 0; isig < nsig; ++isig)
|
||||
+ savsig[isig] = shp->st.trapcom[isig] ? strdup(shp->st.trapcom[isig]) : NULL;
|
||||
/* this nonsense needed for $(trap) */
|
||||
shp->st.otrapcom = (char**)savsig;
|
||||
}
|
||||
@@ -729,7 +732,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
||||
shp->st.otrap = 0;
|
||||
if(nsig)
|
||||
{
|
||||
- memcpy((char*)&shp->st.trapcom[0],savsig,nsig);
|
||||
+ for (isig = 0; isig < nsig; ++isig)
|
||||
+ if (shp->st.trapcom[isig])
|
||||
+ free(shp->st.trapcom[isig]);
|
||||
+ memcpy((char*)&shp->st.trapcom[0],savsig,nsig*sizeof(char*));
|
||||
free((void*)savsig);
|
||||
}
|
||||
shp->options = sp->options;
|
52
ksh-20140929-safefd.patch
Normal file
52
ksh-20140929-safefd.patch
Normal file
@ -0,0 +1,52 @@
|
||||
diff -up ksh-20120801/src/cmd/ksh93/include/io.h.safefd ksh-20120801/src/cmd/ksh93/include/io.h
|
||||
--- ksh-20120801/src/cmd/ksh93/include/io.h.safefd 2015-03-03 18:21:40.544732158 +0100
|
||||
+++ ksh-20120801/src/cmd/ksh93/include/io.h 2015-03-03 18:22:16.284447849 +0100
|
||||
@@ -78,6 +78,7 @@ extern void sh_iorestore(Shell_t*,int,i
|
||||
extern Sfio_t *sh_iostream(Shell_t*,int);
|
||||
extern int sh_redirect(Shell_t*,struct ionod*,int);
|
||||
extern void sh_iosave(Shell_t *, int,int,char*);
|
||||
+extern int safefdnumber(Shell_t* shp, int sfd);
|
||||
extern int sh_iovalidfd(Shell_t*, int);
|
||||
extern int sh_inuse(Shell_t*, int);
|
||||
extern void sh_iounsave(Shell_t*);
|
||||
diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.safefd ksh-20120801/src/cmd/ksh93/sh/io.c
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/io.c.safefd 2015-03-03 18:21:40.511732421 +0100
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/io.c 2015-03-03 18:21:40.544732158 +0100
|
||||
@@ -1724,6 +1724,25 @@ void sh_iosave(Shell_t *shp, register in
|
||||
}
|
||||
}
|
||||
|
||||
+int safefdnumber(Shell_t* shp, int sfd)
|
||||
+{
|
||||
+ register int fd;
|
||||
+
|
||||
+ while(1)
|
||||
+ {
|
||||
+ for(fd=0; fd < shp->topfd; fd++)
|
||||
+ {
|
||||
+ if (filemap[fd].save_fd==sfd || filemap[fd].orig_fd==sfd || (fcntl(sfd, F_GETFD) != -1 || errno != EBADF))
|
||||
+ {
|
||||
+ sfd++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ return sfd;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* close all saved file descriptors
|
||||
*/
|
||||
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.safefd ksh-20120801/src/cmd/ksh93/sh/subshell.c
|
||||
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.safefd 2015-03-03 18:21:40.531732261 +0100
|
||||
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2015-03-03 18:21:40.544732158 +0100
|
||||
@@ -673,7 +673,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
||||
}
|
||||
if(iop && sffileno(iop)==1)
|
||||
{
|
||||
- int fd=sfsetfd(iop,3);
|
||||
+ int fd=sfsetfd(iop,safefdnumber(shp,3));
|
||||
if(fd<0)
|
||||
{
|
||||
shp->toomany = 1;
|
Loading…
Reference in New Issue
Block a user