From: Bernhard Voelker Date: Wed, 26 Mar 2014 00:42:11 +0000 (+0100) Subject: modechange: avoid memory leaks for invalid octal modes X-Git-Tag: v1.0~7413 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=9b784e734cbabe0d25bcf0f845a75674af699342;p=gnulib.git 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). --- diff --git a/ChangeLog b/ChangeLog index 8fa880d0a7..30b364b119 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2014-03-26 Bernhard Voelker + + 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). + 2014-03-24 Paul Eggert gitlog-to-changelog: include a dummy git-log-fix file 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;