From 3e763883eab8435c6ebf9427b9bc49b95a1c7175 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 14 Oct 2019 15:10:33 +0900 Subject: Fixed overflow at onig_region_set To get rid of a bug of `onig_region_set` which takes `int`s instead of `OnigPosition`s, set elements of `beg` and `end` members directly, for the time being. --- ext/strscan/strscan.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'ext') diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c index 99d6992601..84bf884a56 100644 --- a/ext/strscan/strscan.c +++ b/ext/strscan/strscan.c @@ -499,13 +499,17 @@ match_target(struct strscanner *p) static inline void set_registers(struct strscanner *p, size_t length) { - onig_region_clear(&(p->regs)); + const int at = 0; + OnigRegion *regs = &(p->regs); + onig_region_clear(regs); + if (onig_region_set(regs, at, 0, 0)) return; if (p->fixed_anchor_p) { - onig_region_set(&(p->regs), 0, p->curr, p->curr + length); + regs->beg[at] = p->curr; + regs->end[at] = p->curr + length; } else { - onig_region_set(&(p->regs), 0, 0, length); + regs->end[at] = length; } } -- cgit v1.2.3