diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2020-09-17 01:00:06 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2020-09-17 01:00:06 -0700 |
| commit | b5fcc1d4330ba303c22e76569be2d752432564ae (patch) | |
| tree | 29c94daf9f43a663b996d4319d8859a66574e18f /vm.c | |
| parent | 67e538e774b37749c53c553b941736a281e6ac8f (diff) | |
Fixed memory leak in REPLACE pattern
Diffstat (limited to 'vm.c')
| -rw-r--r-- | vm.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -275,12 +275,15 @@ static match_t *_match(grammar_t *g, file_t *f, const char *str, vm_op_t *op, un return m; } case VM_REPLACE: { + match_t *p = NULL; + if (op->args.replace.replace_pat) { + p = _match(g, f, str, op->args.replace.replace_pat, flags, rec); + if (p == NULL) return NULL; + } match_t *m = calloc(sizeof(match_t), 1); m->start = str; m->op = op; - if (op->args.replace.replace_pat) { - match_t *p = _match(g, f, str, op->args.replace.replace_pat, flags, rec); - if (p == NULL) return NULL; + if (p) { m->child = p; m->end = p->end; } else { |
