diff options
author | jilles <jilles@FreeBSD.org> | 2014-04-14 21:26:34 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2014-04-14 21:26:34 +0000 |
commit | 813864aadb85d56ff09c1dcac212be2307bba3ed (patch) | |
tree | 8263de031cf1c7ceb7cb3e0f527b28807f170218 /bin/sh/alias.c | |
parent | 35cde107ba8c9d8dab202424e39a194305eb6524 (diff) | |
download | FreeBSD-src-813864aadb85d56ff09c1dcac212be2307bba3ed.zip FreeBSD-src-813864aadb85d56ff09c1dcac212be2307bba3ed.tar.gz |
MFC r263777: sh: Fix possible memory leaks and double frees with unexpected
SIGINT.
Diffstat (limited to 'bin/sh/alias.c')
-rw-r--r-- | bin/sh/alias.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/bin/sh/alias.c b/bin/sh/alias.c index 9ebdcb5..21f3f44 100644 --- a/bin/sh/alias.c +++ b/bin/sh/alias.c @@ -180,6 +180,7 @@ printaliases(void) int i, j; struct alias **sorted, *ap; + INTOFF; sorted = ckmalloc(aliases * sizeof(*sorted)); j = 0; for (i = 0; i < ATABSIZE; i++) @@ -187,9 +188,13 @@ printaliases(void) if (*ap->name != '\0') sorted[j++] = ap; qsort(sorted, aliases, sizeof(*sorted), comparealiases); - for (i = 0; i < aliases; i++) + for (i = 0; i < aliases; i++) { printalias(sorted[i]); + if (int_pending()) + break; + } ckfree(sorted); + INTON; } int |