From 4cf306ce68876919645c496985065bc557e7da5b Mon Sep 17 00:00:00 2001
From: Kragen Javier Sitaker <kragen@canonical.org>
Date: Sat, 26 Oct 2019 23:30:28 -0300
Subject: [PATCH] Fix noise memory leaks in other base64 examples

It bothers me a little bit that I can't figure out how to free the
parser --- surely that is a thing that the bindings for other
languages need to do --- but storing a pointer to the parser in a
statically-allocated variable, as in base64.c, at least stops valgrind
from reporting the parser as a memory leak.
---
 examples/base64_sem1.c | 6 ++++--
 examples/base64_sem2.c | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/examples/base64_sem1.c b/examples/base64_sem1.c
index afbbef8..7127d1e 100644
--- a/examples/base64_sem1.c
+++ b/examples/base64_sem1.c
@@ -149,12 +149,13 @@ HParser *init_parser(void)
 
 #include <stdio.h>
 
+const HParser *parser;  // Allocated statically to suppress leak warnings
+
 int main(int argc, char **argv)
 {
     uint8_t input[102400];
     size_t inputsize;
-    const HParser *parser;
-    const HParseResult *result;
+    HParseResult *result;
 
     parser = init_parser();
 
@@ -166,6 +167,7 @@ int main(int argc, char **argv)
     if(result) {
         fprintf(stderr, "parsed=%" PRId64 " bytes\n", result->bit_length/8);
         h_pprint(stdout, result->ast, 0, 0);
+        h_parse_result_free(result);
         return 0;
     } else {
         return 1;
diff --git a/examples/base64_sem2.c b/examples/base64_sem2.c
index b8f7b4a..dac7e7a 100644
--- a/examples/base64_sem2.c
+++ b/examples/base64_sem2.c
@@ -153,12 +153,13 @@ const HParser *init_parser(void)
 
 #include <stdio.h>
 
+const HParser *parser;  // Allocated statically to suppress leak warnings
+
 int main(int argc, char **argv)
 {
     uint8_t input[102400];
     size_t inputsize;
-    const HParser *parser;
-    const HParseResult *result;
+    HParseResult *result;
 
     parser = init_parser();
 
@@ -170,6 +171,7 @@ int main(int argc, char **argv)
     if(result) {
         fprintf(stderr, "parsed=%" PRId64 " bytes\n", result->bit_length/8);
         h_pprint(stdout, result->ast, 0, 0);
+        h_parse_result_free(result);
         return 0;
     } else {
         return 1;
-- 
GitLab