summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2012-09-09 20:06:03 +0000
committerPaul Smith <psmith@gnu.org>2012-09-09 20:06:03 +0000
commita95dc485fa060a57916a091b6990db0b76f4bdab (patch)
treedb57095b66dc76948a255cd7452daf49f79a9aeb
parent30b2e4207d2f41c64e843959119a03307e06aa9a (diff)
downloadgunmake-a95dc485fa060a57916a091b6990db0b76f4bdab.tar.gz
Break out of an infinite loop if we're not making progress.
-rw-r--r--ChangeLog2
-rw-r--r--read.c4
2 files changed, 6 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index aa2e517..ffe1a5d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
diff --git a/read.c b/read.c
index 7f6939e..8478c8d 100644
--- a/read.c
+++ b/read.c
@@ -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