From c3fca0a1b727fc0375be045b5a3c9359266bf0a1 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Mon, 8 Jun 2020 19:26:47 +0200
Subject: [PATCH] testsuite: Drop needless result reference in testsuite_run().

This holds a reference to the initial result, causing it to linger after
test_result_reset, thereby also holding a reference to the message context,
preventing it from being cleared. This in turn, can keep references to modified
message versions that cause the main message object to remain referenced. This
causes a panic in specific cases upon test_result_reset:

Panic: Input stream data unexpectedly has references
---
 src/testsuite/testsuite.c                  |  2 --
 tests/extensions/editheader/execute.svtest | 12 ++++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index 2be6d2d3b..9552e7119 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -69,9 +69,7 @@ testsuite_run(struct sieve_binary *sbin, struct sieve_error_handler *ehandler)
 
 	/* Run the interpreter */
 	result = testsuite_result_get();
-	sieve_result_ref(result);
 	ret = sieve_interpreter_run(interp, result);
-	sieve_result_unref(&result);
 
 	/* Free the interpreter */
 	sieve_interpreter_free(&interp);
diff --git a/tests/extensions/editheader/execute.svtest b/tests/extensions/editheader/execute.svtest
index ca33548e4..e65cc5d63 100644
--- a/tests/extensions/editheader/execute.svtest
+++ b/tests/extensions/editheader/execute.svtest
@@ -1,11 +1,23 @@
 require "vnd.dovecot.testsuite";
 require "include";
 require "variables";
+require "editheader";
+
+/*
+ * Testsuite self-test
+ */
+
+set "message" ".";
+addheader "X-Some-Header" "Header content";
+test_result_reset;
+test_set "message" "${message}";
 
 /*
  * Multi script
  */
 
+test_result_reset;
+
 test_set "message" text:
 From: idiot@example.com
 To: idiot@example.org
-- 
GitLab