mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2024-10-26 12:25:09 +03:00
regexp: Fix checks for eliminated transitions
'to' can be set to -1 or -2 when eliminating transitions, so check for all negative values.
This commit is contained in:
parent
90759c598d
commit
e301865e69
12
xmlregexp.c
12
xmlregexp.c
@ -600,7 +600,7 @@ xmlRegEpxFromParse(xmlRegParserCtxtPtr ctxt) {
|
|||||||
|
|
||||||
for (j = 0;j < state->nbTrans;j++) {
|
for (j = 0;j < state->nbTrans;j++) {
|
||||||
trans = &(state->trans[j]);
|
trans = &(state->trans[j]);
|
||||||
if ((trans->to == -1) || (trans->atom == NULL))
|
if ((trans->to < 0) || (trans->atom == NULL))
|
||||||
continue;
|
continue;
|
||||||
atomno = stringRemap[trans->atom->no];
|
atomno = stringRemap[trans->atom->no];
|
||||||
if ((trans->atom->data != NULL) && (transdata == NULL)) {
|
if ((trans->atom->data != NULL) && (transdata == NULL)) {
|
||||||
@ -2758,11 +2758,11 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
|
|||||||
/* t1->nd = 1; */
|
/* t1->nd = 1; */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (t1->to == -1) /* eliminated */
|
if (t1->to < 0) /* eliminated */
|
||||||
continue;
|
continue;
|
||||||
for (i = 0;i < transnr;i++) {
|
for (i = 0;i < transnr;i++) {
|
||||||
t2 = &(state->trans[i]);
|
t2 = &(state->trans[i]);
|
||||||
if (t2->to == -1) /* eliminated */
|
if (t2->to < 0) /* eliminated */
|
||||||
continue;
|
continue;
|
||||||
if (t2->atom != NULL) {
|
if (t2->atom != NULL) {
|
||||||
if (t1->to == t2->to) {
|
if (t1->to == t2->to) {
|
||||||
@ -2800,11 +2800,11 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
|
|||||||
if (t1->atom == NULL) {
|
if (t1->atom == NULL) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (t1->to == -1) /* eliminated */
|
if (t1->to < 0) /* eliminated */
|
||||||
continue;
|
continue;
|
||||||
for (i = 0;i < transnr;i++) {
|
for (i = 0;i < transnr;i++) {
|
||||||
t2 = &(state->trans[i]);
|
t2 = &(state->trans[i]);
|
||||||
if (t2->to == -1) /* eliminated */
|
if (t2->to < 0) /* eliminated */
|
||||||
continue;
|
continue;
|
||||||
if (t2->atom != NULL) {
|
if (t2->atom != NULL) {
|
||||||
/*
|
/*
|
||||||
@ -2818,7 +2818,7 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
|
|||||||
t2->nd = 1;
|
t2->nd = 1;
|
||||||
last = t1;
|
last = t1;
|
||||||
}
|
}
|
||||||
} else if (t1->to != -1) {
|
} else {
|
||||||
/*
|
/*
|
||||||
* do the closure in case of remaining specific
|
* do the closure in case of remaining specific
|
||||||
* epsilon transitions like choices or all
|
* epsilon transitions like choices or all
|
||||||
|
Loading…
Reference in New Issue
Block a user