From 2cf8b26bf859fd0692d67ab84c341c858521aff4 Mon Sep 17 00:00:00 2001 From: emboss Date: Sun, 22 May 2011 19:38:05 +0000 Subject: [PATCH] * ext/openssl/ossl_asn1.c (ossl_asn1_initialize): Allow creation of Constructives with an explicit tag_class parameter without automatically setting tagging to :EXPLICIT. Fixes a bug when encoding infinite length primitive values. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31699 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/openssl/ossl_asn1.c | 16 +++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index a4b39ea49a..977c67b98f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon May 23 04:03:46 2011 Martin Bosslet + + * ext/openssl/ossl_asn1.c (ossl_asn1_initialize): Allow creation of + Constructives with an explicit tag_class parameter without + automatically setting tagging to :EXPLICIT. Fixes a bug when encoding + infinite length primitive values. + Mon May 23 04:03:46 2011 Martin Bosslet * ext/openssl/ossl_asn1.c (ossl_asn1_cons_to_der): Add an additional diff --git a/ext/openssl/ossl_asn1.c b/ext/openssl/ossl_asn1.c index 7b0c16ca78..aa531ba572 100644 --- a/ext/openssl/ossl_asn1.c +++ b/ext/openssl/ossl_asn1.c @@ -1011,12 +1011,14 @@ ossl_asn1_initialize(int argc, VALUE *argv, VALUE self) if(argc > 1){ if(NIL_P(tag)) ossl_raise(eASN1Error, "must specify tag number"); - if(NIL_P(tagging)) - tagging = ID2SYM(sEXPLICIT); - if(!SYMBOL_P(tagging)) - ossl_raise(eASN1Error, "invalid tag default"); - if(NIL_P(tag_class)) - tag_class = ID2SYM(sCONTEXT_SPECIFIC); + if(!NIL_P(tagging) && !SYMBOL_P(tagging)) + ossl_raise(eASN1Error, "invalid tagging method"); + if(NIL_P(tag_class)) { + if (NIL_P(tagging)) + tag_class = ID2SYM(sUNIVERSAL); + else + tag_class = ID2SYM(sCONTEXT_SPECIFIC); + } if(!SYMBOL_P(tag_class)) ossl_raise(eASN1Error, "invalid tag class"); if(SYM2ID(tagging) == sIMPLICIT && NUM2INT(tag) > 31) @@ -1024,7 +1026,7 @@ ossl_asn1_initialize(int argc, VALUE *argv, VALUE self) } else{ tag = INT2NUM(ossl_asn1_default_tag(self)); - tagging = Qnil; + tagging = Qnil; tag_class = ID2SYM(sUNIVERSAL); } ossl_asn1_set_tag(self, tag);