1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-07-29 11:41:22 +03:00

Fix an error with regexp on nullable counted char transition

This is the first of the two issues raised by Pete Cordell
in https://mail.gnome.org/archives/xml/2016-April/msg00030.html
This commit is contained in:
Daniel Veillard
2016-05-09 09:28:38 +08:00
parent 6eb0894a96
commit 34b350048d

View File

@ -1544,6 +1544,7 @@ static int
xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
xmlRegStatePtr to, xmlRegAtomPtr atom) {
xmlRegStatePtr end;
int nullable = 0;
if (atom == NULL) {
ERROR("genrate transition: atom == NULL");
@ -1730,6 +1731,13 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
if (xmlRegAtomPush(ctxt, atom) < 0) {
return(-1);
}
if ((atom->quant == XML_REGEXP_QUANT_RANGE) &&
(atom->min == 0) && (atom->max > 0)) {
nullable = 1;
atom->min = 1;
if (atom->max == 1)
atom->quant = XML_REGEXP_QUANT_OPT;
}
xmlRegStateAddTrans(ctxt, from, atom, to, -1, -1);
ctxt->state = end;
switch (atom->quant) {
@ -1747,11 +1755,8 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
break;
case XML_REGEXP_QUANT_RANGE:
#if DV_test
if (atom->min == 0) {
if (nullable)
xmlFAGenerateEpsilonTransition(ctxt, from, to);
}
#endif
break;
default:
break;