$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r56355 - trunk/boost/spirit/home/qi/operator
From: hartmut.kaiser_at_[hidden]
Date: 2009-09-22 13:07:12
Author: hkaiser
Date: 2009-09-22 13:07:10 EDT (Tue, 22 Sep 2009)
New Revision: 56355
URL: http://svn.boost.org/trac/boost/changeset/56355
Log:
Spirit: fixed infinite loop if a Kleene is used inside another Kleene at end of input
Text files modified:
trunk/boost/spirit/home/qi/operator/kleene.hpp | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
Modified: trunk/boost/spirit/home/qi/operator/kleene.hpp
==============================================================================
--- trunk/boost/spirit/home/qi/operator/kleene.hpp (original)
+++ trunk/boost/spirit/home/qi/operator/kleene.hpp 2009-09-22 13:07:10 EDT (Tue, 22 Sep 2009)
@@ -62,8 +62,11 @@
value_type;
value_type val = value_type();
- // Repeat while subject parses ok
- while (subject.parse(first, last, context, skipper, val))
+ // Repeat while not at eoi and subject parses ok. We need to check
+ // for eoi as the subject could be another Kleene parser, which
+ // would result in an infinite loop when end of input is reached.
+ while (first != last &&
+ subject.parse(first, last, context, skipper, val))
{
// push the parsed value into our attribute
traits::push_back(attr, val);