From 80f791b7a88b0ea38a290375a09d5f7661bf95e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Wed, 20 Aug 2014 18:34:42 +0200
Subject: [PATCH] encode_value: Improved support for variant functions.

Variant functions weren't dumped correctly if they were
overloading inherited non-variant functions.

Fixes remaining issue with the dumping of Crypto.RSA.State.
---
 src/encode.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/encode.c b/src/encode.c
index 4d1b31040d..5b776eba0e 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -1385,7 +1385,12 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc
 			       "is inherited.\n", id->name);
 		  }
 		  gs_flags = ref->id_flags & PTR_FROM_INT(p, i)->id_flags;
-		  if (id_dumped[PTR_FROM_INT(p, i)->identifier_offset]) {
+		  if (id_dumped[PTR_FROM_INT(p, i)->identifier_offset] ||
+		      (i < d)) {
+		    /* Either already dumped, or the dispatcher is in
+		     * front of us, which indicates that we are overloading
+		     * an inherited function with a variant.
+		     */
 		    gs_flags |= ID_VARIANT;
 		  } else {
 		    /* First variant. */
-- 
GitLab