]> granicus.if.org Git - re2c/commitdiff
libre2c_posix: fixed memleaks.
authorUlya Trofimovich <skvadrik@gmail.com>
Sat, 12 Jan 2019 14:18:21 +0000 (14:18 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Sat, 12 Jan 2019 14:18:21 +0000 (14:18 +0000)
re2c/Makefile.libre2c_posix.am
re2c/libre2c_posix/regcomp.cc
re2c/libre2c_posix/regex.h
re2c/libre2c_posix/regfree.cc [new file with mode: 0644]
re2c/libre2c_posix/test.cpp

index 3403640754524c11bd519b8e9bf6e41e4a63db26..05729ede79a8563a3e14e35ff7b4d36fa6082d39 100644 (file)
@@ -72,6 +72,7 @@ libre2c_posix_a_HDR = \
 libre2c_posix_a_SRC = \
        libre2c_posix/regcomp.cc \
        libre2c_posix/regexec.cc \
+       libre2c_posix/regfree.cc \
        libre2c_posix/stubs.cc \
        src/parse/ast.cc \
        src/options/msg.cc \
index 0a2e994ff0909a9b8c33bcc18261d9d29a130596..3c8334c829edced2855fb3d979e645737d52f85a 100644 (file)
@@ -52,5 +52,6 @@ int regcomp(regex_t *preg, const char *pattern, int /* cflags */)
     preg->nfa = nfa;
     preg->dfa = dfa;
 
+    delete opt;
     return 0;
 }
index 31242d1a027e331a36c17c5b3ccf3de45a94f4b3..ef166b431671af4b24d2e774cbf2f85ca9c7a627 100644 (file)
@@ -4,13 +4,15 @@
 #include <stddef.h>
 #include <limits.h>
 
+#include "src/util/c99_stdint.h"
+
 // fwd
 namespace re2c {
 struct nfa_t;
 struct dfa_t;
 }
 
-typedef ssize_t regoff_t;
+typedef ptrdiff_t regoff_t;
 
 struct regex_t {
     const re2c::nfa_t *nfa;
diff --git a/re2c/libre2c_posix/regfree.cc b/re2c/libre2c_posix/regfree.cc
new file mode 100644 (file)
index 0000000..d0d9596
--- /dev/null
@@ -0,0 +1,22 @@
+#include "libre2c_posix/regex.h"
+#include "src/nfa/nfa.h"
+#include "src/dfa/dfa.h"
+
+
+using namespace re2c;
+
+void regfree(regex_t *preg)
+{
+    const nfa_t *nfa = preg->nfa;
+    const dfa_t *dfa = preg->dfa;
+
+    delete &dfa->charset;
+    delete &dfa->rules;
+    delete &dfa->tags;
+    delete &dfa->mtagvers;
+    delete[] dfa->finvers;
+    delete &dfa->tcpool;
+
+    delete dfa;
+    delete nfa;
+}
index c1463c53391c4832b87e388223a2bc25b8ba99e4..6a46a0e0da8bafa1c492d9e30e57e977c50b456c 100644 (file)
@@ -50,7 +50,9 @@ int test(const char *pattern, const char *string, size_t nmatch, ...)
 
 end:
     va_end(vl);
+    regfree(&re);
     delete[] pmatch;
+
     return result;
 }