diff options
author | Paul Smith <psmith@gnu.org> | 2012-09-09 20:06:03 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2012-09-09 20:06:03 +0000 |
commit | a95dc485fa060a57916a091b6990db0b76f4bdab (patch) | |
tree | db57095b66dc76948a255cd7452daf49f79a9aeb | |
parent | 30b2e4207d2f41c64e843959119a03307e06aa9a (diff) | |
download | gunmake-a95dc485fa060a57916a091b6990db0b76f4bdab.tar.gz |
Break out of an infinite loop if we're not making progress.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | read.c | 4 |
2 files changed, 6 insertions, 0 deletions
@@ -2,6 +2,8 @@ * read.c (record_files): Reset the default macro values if .POSIX is set. Fixes Savannah bug #37069. + (parse_file_seq): Break out of an infinite loop if we're not + making progress when parsing archive references. 2012-09-01 Eli Zaretskii <eliz@gnu.org> @@ -3087,6 +3087,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar, const char *e = p; do { + const char *o = e; e = next_token (e); /* Find the end of this word. We don't want to unquote and we don't care about quoting since we're looking for the @@ -3094,6 +3095,9 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar, while (*e != '\0' && *e != stopchar && *e != VMS_COMMA && ! isblank ((unsigned char) *e)) ++e; + /* If we didn't move, we're done now. */ + if (e == o) + break; if (e[-1] == ')') { /* Found the end, so this is the first element in an |