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