[libxml2] Avoid a potential infinite recursion



commit 466fcdaa33258cf3633887222146b891d202cc6c
Author: Daniel Veillard <veillard redhat com>
Date:   Mon Aug 27 12:03:40 2012 +0800

    Avoid a potential infinite recursion
    
    Which can happen when eliminating epsilon transitions, as reported
    by Pavel Madr <pmadr opentext com>

 xmlregexp.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)
---
diff --git a/xmlregexp.c b/xmlregexp.c
index b952708..493bfc7 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -222,6 +222,7 @@ struct _xmlRegTrans {
 struct _xmlAutomataState {
     xmlRegStateType type;
     xmlRegMarkedType mark;
+    xmlRegMarkedType markd;
     xmlRegMarkedType reached;
     int no;
     int maxTrans;
@@ -2589,6 +2590,8 @@ xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
 
     if (state == NULL)
 	return(ret);
+    if (state->markd == XML_REGEXP_MARK_VISITED)
+	return(ret);
 
     if (ctxt->flags & AM_AUTOMATA_RNG)
         deep = 0;
@@ -2606,8 +2609,10 @@ xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
 	if (t1->atom == NULL) {
 	    if (t1->to < 0)
 		continue;
+	    state->markd = XML_REGEXP_MARK_VISITED;
 	    res = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
 		                           to, atom);
+	    state->markd = 0;
 	    if (res == 0) {
 	        ret = 0;
 		/* t1->nd = 1; */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]