cppregex regex_error_desc()

Address sanitizer caught a use after free.
cppregex.cpp regex_error_desc() was not returning a pointer
to a static buffer, yet the posixregex was. Follow suit.
This commit is contained in:
nhmall
2022-06-30 12:58:19 -04:00
parent f228fefabd
commit 0fd999a6b5

View File

@@ -12,6 +12,7 @@ extern "C" {
#include <hack.h>
extern const char regex_id[] = "cppregex";
static char cppregex_static_buffer[BUFSZ];
struct nhregex {
std::unique_ptr<std::regex> re;
@@ -39,10 +40,12 @@ extern "C" {
}
const char *regex_error_desc(struct nhregex *re) {
if (re->err)
return re->err->what();
else
return nullptr;
if (re->err) {
Snprintf(cppregex_static_buffer, sizeof cppregex_static_buffer,
"%s", re->err->what());
return cppregex_static_buffer;
} else
return nullptr;
}
boolean regex_match(const char *s, struct nhregex *re) {