1
0
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:
Nick Wellnhofer 2023-03-09 05:34:38 +01:00
parent 90759c598d
commit e301865e69

View File

@ -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