diff --git a/src/plugins/sieve-extprograms/cmd-execute.c b/src/plugins/sieve-extprograms/cmd-execute.c
index 5defe1f02b4c1f6cffd1110a9439e323150d4352..052998d691bb40af3a49a4026bc97ddedf86c628 100644
--- a/src/plugins/sieve-extprograms/cmd-execute.c
+++ b/src/plugins/sieve-extprograms/cmd-execute.c
@@ -378,7 +378,7 @@ static int cmd_execute_operation_execute
 			// FIXME: limit output size
 			struct ostream *outdata;
 
-			outbuf = buffer_create_dynamic(pool_datastack_create(), 1024);
+			outbuf = buffer_create_dynamic(default_pool, 1024);
 			outdata = o_stream_create_buffer(outbuf);
 			sieve_extprogram_set_output(sprog, outdata);
 			o_stream_unref(&outdata);
@@ -389,6 +389,8 @@ static int cmd_execute_operation_execute
 
 			if ( sieve_extprogram_set_input_mail(sprog, mail) < 0 ) {
 				sieve_extprogram_destroy(&sprog);
+				if ( outbuf != NULL )
+					buffer_free(&outbuf);
 				return sieve_runtime_mail_error(renv, mail,
 					"execute action: failed to read input message");
 			}