svn commit: r317039 - in head/bin/sh: . tests/parser
Jilles Tjoelker
jilles at FreeBSD.org
Sun Apr 16 22:10:03 UTC 2017
Author: jilles
Date: Sun Apr 16 22:10:02 2017
New Revision: 317039
URL: https://svnweb.freebsd.org/changeset/base/317039
Log:
sh: Fix use after free when resetting an in-use alias.
The special case of modifying an existing alias does not work correctly if
the alias is currently in use. Instead, handle this case by unaliasing the
old alias (if any) and then creating a new alias.
Added:
head/bin/sh/tests/parser/alias18.0 (contents, props changed)
Modified:
head/bin/sh/alias.c
head/bin/sh/tests/parser/Makefile
Modified: head/bin/sh/alias.c
==============================================================================
--- head/bin/sh/alias.c Sun Apr 16 21:57:25 2017 (r317038)
+++ head/bin/sh/alias.c Sun Apr 16 22:10:02 2017 (r317039)
@@ -63,17 +63,8 @@ setalias(const char *name, const char *v
{
struct alias *ap, **app;
+ unalias(name);
app = hashalias(name);
- for (ap = *app; ap; ap = ap->next) {
- if (equal(name, ap->name)) {
- INTOFF;
- ckfree(ap->val);
- ap->val = savestr(val);
- INTON;
- return;
- }
- }
- /* not found */
INTOFF;
ap = ckmalloc(sizeof (struct alias));
ap->name = savestr(name);
Modified: head/bin/sh/tests/parser/Makefile
==============================================================================
--- head/bin/sh/tests/parser/Makefile Sun Apr 16 21:57:25 2017 (r317038)
+++ head/bin/sh/tests/parser/Makefile Sun Apr 16 22:10:02 2017 (r317039)
@@ -24,6 +24,7 @@ ${PACKAGE}FILES+= alias14.0
${PACKAGE}FILES+= alias15.0 alias15.0.stdout
${PACKAGE}FILES+= alias16.0
${PACKAGE}FILES+= alias17.0
+${PACKAGE}FILES+= alias18.0
${PACKAGE}FILES+= and-pipe-not.0
${PACKAGE}FILES+= case1.0
${PACKAGE}FILES+= case2.0
Added: head/bin/sh/tests/parser/alias18.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/bin/sh/tests/parser/alias18.0 Sun Apr 16 22:10:02 2017 (r317039)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+v=1
+alias a='alias a=v=2
+v=3
+a'
+eval a
+[ "$v" = 2 ]
More information about the svn-src-head
mailing list