summaryrefslogtreecommitdiff
path: root/lib/modechange.c
diff options
context:
space:
mode:
authorBernhard Voelker <mail@bernhard-voelker.de>2014-03-26 01:42:11 +0100
committerPaul Eggert <eggert@cs.ucla.edu>2014-03-25 18:25:27 -0700
commit9b784e734cbabe0d25bcf0f845a75674af699342 (patch)
tree7414d86c64bb16f479fdbd6656e6465c28c642b3 /lib/modechange.c
parent602f4c2fe30c5844bdb84f3e1b767baee7cd5b1b (diff)
downloadgnulib-9b784e734cbabe0d25bcf0f845a75674af699342.tar.gz
modechange: avoid memory leaks for invalid octal modes
* lib/modechange.c (mode_compile): During the parsing of notations like +40, free the 'mc' buffer for invalid mode strings like +17777 (greater than the maximum octal mode), =18 (bad octal mode characters) or u=1 ('affected' with octal modes). Reproducer, e.g.: $ valgrind --leak-check=full chmod +17777 file Introduced via the 2012-03-09 commit, 4730c3e3, "modechange: add notations +40, 00440, etc.". Spotted by coverity (RESOURCE_LEAK).
Diffstat (limited to 'lib/modechange.c')
-rw-r--r--lib/modechange.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/modechange.c b/lib/modechange.c
index 8ac18799f8..412fe1d27f 100644
--- a/lib/modechange.c
+++ b/lib/modechange.c
@@ -220,12 +220,12 @@ mode_compile (char const *mode_string)
{
octal_mode = 8 * octal_mode + *p++ - '0';
if (ALLM < octal_mode)
- return NULL;
+ goto invalid;
}
while ('0' <= *p && *p < '8');
if (affected || (*p && *p != ','))
- return NULL;
+ goto invalid;
affected = mentioned = CHMOD_MODE_BITS;
value = octal_to_mode (octal_mode);
flag = MODE_ORDINARY_CHANGE;