From a44af202ed10d7c8d7158311e9414216fb04d967 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sat, 12 Oct 2013 15:00:51 +0200
Subject: [PATCH] decode_value(): Kludge: Keep function wrapper for programs
 needing parent.

Fixes issue with getting "Parent lost, cannot clone program." from
SSL.handshake()->*derive*_master_secret() in dumped Pikes.
---
 src/encode.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/encode.c b/src/encode.c
index e713561d99..b2e96f5c65 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -3225,6 +3225,13 @@ static void decode_value2(struct decode_data *data)
 	    break;
 	  }
 
+	  if ((p->flags & PROGRAM_NEEDS_PARENT)) {
+	    EDB(2, fprintf(stderr, "%*sKeeping %s to keep parent pointer.\n",
+			   data->depth, "",
+			   get_name_of_type(TYPEOF(Pike_sp[-1]))));
+	    break;
+	  }
+
 	  add_ref(p);
 	  pop_stack();
 	  push_program(p);
-- 
GitLab