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
Christian Marangi 2024-05-09 19:17:38 +02:00
parent 32a22201db
commit 3aa746b246
No known key found for this signature in database
GPG Key ID: AC001D09ADBFEAD7
2 changed files with 12 additions and 4 deletions

View File

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

View File

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