mirror of https://github.com/openwrt/packages.git
nginx-util: fix SEGFAULT from regex_search
In converting nginx-util to PCRE2, it was wrongly dropped saving the
results of the regex match causing segmentation fault when used.
Add the missing code to correctly store the vector of the results from
the regex.
Fixes: b738e42c4d
("nginx-util: move to pcre2")
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
pull/24108/head
parent
32a22201db
commit
3aa746b246
|
@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=nginx-util
|
||||
PKG_VERSION:=1.6
|
||||
PKG_RELEASE:=20
|
||||
PKG_RELEASE:=21
|
||||
PKG_MAINTAINER:=Peter Stadler <peter.stadler@student.uibk.ac.at>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
|
|
@ -132,7 +132,7 @@ class smatch {
|
|||
|
||||
std::string::const_iterator end;
|
||||
|
||||
std::vector<int> vec{};
|
||||
std::vector<PCRE2_SIZE> vec{};
|
||||
|
||||
int n = 0;
|
||||
|
||||
|
@ -227,13 +227,21 @@ auto regex_search(const std::string::const_iterator begin,
|
|||
match.vec.reserve(sz);
|
||||
|
||||
const char* subj = &*begin;
|
||||
int len = static_cast<int>(&*end - subj);
|
||||
int n, len = static_cast<int>(&*end - subj);
|
||||
unsigned int ov_count;
|
||||
PCRE2_SIZE *ov;
|
||||
|
||||
match.begin = begin;
|
||||
match.end = end;
|
||||
|
||||
pcre2_match_data *match_data = pcre2_match_data_create(sz, NULL);
|
||||
match.n = pcre2_match(rgx(), (PCRE2_SPTR)subj, len, 0, 0, match_data, NULL);
|
||||
n = pcre2_match(rgx(), (PCRE2_SPTR)subj, len, 0, 0, match_data, NULL);
|
||||
ov = pcre2_get_ovector_pointer(match_data);
|
||||
ov_count = pcre2_get_ovector_count(match_data);
|
||||
|
||||
match.vec.assign(ov, ov + ov_count);
|
||||
match.n = n;
|
||||
|
||||
pcre2_match_data_free(match_data);
|
||||
|
||||
if (match.n < 0) {
|
||||
|
|
Loading…
Reference in New Issue