mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix more bugs that occur when enabling ASan (#293)
src/cmd/ksh93/{bltins/typeset,sh/name,sh/nvtree,sh/nvtype}.c: - Replace more instances of memcmp with strncmp to fix heap-buffer-overflow errors when running the regression tests with ASan enabled. src/cmd/ksh93/edit/vi.c: - Fix an invalid dereference of the 'p' pointer to fix a crash in vi mode when entering a comment in the command history. This bugfix was backported from ksh2020: https://github.com/att/ast/issues/798 src/cmd/ksh93/tests/pty.sh: - Add a regression test for the vi mode crash.
This commit is contained in:
parent
88a1f3d661
commit
1aec9b06dd
6 changed files with 20 additions and 5 deletions
|
@ -1581,7 +1581,7 @@ static void print_scan(Sfio_t *file, int flag, Dt_t *root, int option,struct tda
|
||||||
if(name)
|
if(name)
|
||||||
{
|
{
|
||||||
char *newname = nv_name(np);
|
char *newname = nv_name(np);
|
||||||
if(memcmp(name,newname,len)==0 && newname[len]== '.')
|
if(strncmp(name,newname,len)==0 && newname[len]== '.')
|
||||||
continue;
|
continue;
|
||||||
name = 0;
|
name = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -992,7 +992,7 @@ static int cntlmode(Vi_t *vp)
|
||||||
c = (virtual[0]=='#');
|
c = (virtual[0]=='#');
|
||||||
while(p-- >= virtual)
|
while(p-- >= virtual)
|
||||||
{
|
{
|
||||||
if(*p=='\n' || p<virtual)
|
if(p<virtual || *p=='\n')
|
||||||
{
|
{
|
||||||
if(c) /* delete '#' */
|
if(c) /* delete '#' */
|
||||||
{
|
{
|
||||||
|
|
|
@ -187,7 +187,7 @@ Namval_t *nv_addnode(Namval_t* np, int remove)
|
||||||
nv_delete(np,root,NV_NOFREE);
|
nv_delete(np,root,NV_NOFREE);
|
||||||
np = nv_search(sp->rp->nvname,root,NV_ADD);
|
np = nv_search(sp->rp->nvname,root,NV_ADD);
|
||||||
}
|
}
|
||||||
if(sp->numnodes && memcmp(np->nvname,NV_CLASS,sizeof(NV_CLASS)-1))
|
if(sp->numnodes && strncmp(np->nvname,NV_CLASS,sizeof(NV_CLASS)-1))
|
||||||
{
|
{
|
||||||
name = (sp->nodes[0])->nvname;
|
name = (sp->nodes[0])->nvname;
|
||||||
i = strlen(name);
|
i = strlen(name);
|
||||||
|
|
|
@ -181,7 +181,7 @@ void *nv_diropen(Namval_t *np,const char *name)
|
||||||
{
|
{
|
||||||
char *cp = nv_name(dp->hp);
|
char *cp = nv_name(dp->hp);
|
||||||
c = strlen(cp);
|
c = strlen(cp);
|
||||||
if(memcmp(name,cp,c) || name[c]!='[')
|
if(strncmp(name,cp,c) || name[c]!='[')
|
||||||
dp->hp = (Namval_t*)dtnext(dp->root,dp->hp);
|
dp->hp = (Namval_t*)dtnext(dp->root,dp->hp);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -883,7 +883,7 @@ Namval_t *nv_mktype(Namval_t **nodes, int numnodes)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
nnodes++;
|
nnodes++;
|
||||||
if(name && memcmp(&name[m],&np->nvname[m],n)==0 && np->nvname[m+n]=='.')
|
if(name && strncmp(&name[m],&np->nvname[m],n)==0 && np->nvname[m+n]=='.')
|
||||||
offset -= sizeof(char*);
|
offset -= sizeof(char*);
|
||||||
dsize = nv_datasize(np,&offset);
|
dsize = nv_datasize(np,&offset);
|
||||||
if(!nv_isarray(np) && (dp=(Namtype_t*)nv_hasdisc(np, &type_disc)))
|
if(!nv_isarray(np) && (dp=(Namtype_t*)nv_hasdisc(np, &type_disc)))
|
||||||
|
|
|
@ -826,5 +826,20 @@ w :\E_
|
||||||
r ^:test-2: : One\\ "Two Three"\$'Four Five'\.mp3\r\n$
|
r ^:test-2: : One\\ "Two Three"\$'Four Five'\.mp3\r\n$
|
||||||
!
|
!
|
||||||
|
|
||||||
|
# err_exit #
|
||||||
|
((SHOPT_VSH)) && tst $LINENO <<"!"
|
||||||
|
L crash when entering comment into history file (vi mode)
|
||||||
|
# https://github.com/att/ast/issues/798
|
||||||
|
|
||||||
|
d 15
|
||||||
|
p :test-1:
|
||||||
|
c foo \E#
|
||||||
|
r ^:test-1: #foo\r\n$
|
||||||
|
w hist -lnN 1
|
||||||
|
r ^:test-2: hist -lnN 1\r\n$
|
||||||
|
r \t#foo\r\n$
|
||||||
|
r \thist -lnN 1\r\n$
|
||||||
|
!
|
||||||
|
|
||||||
# ======
|
# ======
|
||||||
exit $((Errors<125?Errors:125))
|
exit $((Errors<125?Errors:125))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue