1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-09 23:39:51 +02:00

regexp: Check if ->pmatch != NULL.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2020-02-12 12:51:16 +09:00
parent ece1764c12
commit 29eb843fa5
2 changed files with 13 additions and 9 deletions

View File

@ -1214,12 +1214,16 @@ static int regtry( regex_t *preg, const char *string )
preg->reginput = string;
for (i = 0; i < preg->nmatch; i++) {
preg->pmatch[i].rm_so = -1;
preg->pmatch[i].rm_eo = -1;
if (preg->pmatch) {
preg->pmatch[i].rm_so = -1;
preg->pmatch[i].rm_eo = -1;
}
}
if (regmatch(preg, 1)) {
preg->pmatch[0].rm_so = string - preg->start;
preg->pmatch[0].rm_eo = preg->reginput - preg->start;
if (preg->pmatch) {
preg->pmatch[0].rm_so = string - preg->start;
preg->pmatch[0].rm_eo = preg->reginput - preg->start;
}
return(1);
} else
return(0);
@ -1569,13 +1573,13 @@ static int regmatch(regex_t *preg, int prog)
if (regmatch(preg, next)) {
if (OP(preg, scan) < CLOSE) {
int no = OP(preg, scan) - OPEN;
if (no < preg->nmatch && preg->pmatch[no].rm_so == -1) {
if (no < preg->nmatch && preg->pmatch && preg->pmatch[no].rm_so == -1) {
preg->pmatch[no].rm_so = save - preg->start;
}
}
else {
int no = OP(preg, scan) - CLOSE;
if (no < preg->nmatch && preg->pmatch[no].rm_eo == -1) {
if (no < preg->nmatch && preg->pmatch && preg->pmatch[no].rm_eo == -1) {
preg->pmatch[no].rm_eo = save - preg->start;
}
}

View File

@ -37,7 +37,7 @@ typedef struct {
* it anyway.
*/
typedef struct regexp {
struct regexp {
/* -- public -- */
int re_nsub; /* number of parenthesized subexpressions */
@ -64,9 +64,9 @@ typedef struct regexp {
/* Input to regexec() */
regmatch_t *pmatch; /* submatches will be stored here */
int nmatch; /* size of pmatch[] */
} regexp;
};
typedef regexp regex_t;
typedef struct regexp regex_t;
#define REG_EXTENDED 0
#define REG_NEWLINE 1