summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremboss <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-22 19:38:05 +0000
committeremboss <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-22 19:38:05 +0000
commit2cf8b26bf859fd0692d67ab84c341c858521aff4 (patch)
tree81e60a2999e7a83f31939d71695d5b56b4143da0
parentefd99b781b711bdc32acef1ae3729f47cc69d86a (diff)
* 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
-rw-r--r--ChangeLog7
-rw-r--r--ext/openssl/ossl_asn1.c16
2 files changed, 16 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index a4b39ea49a..977c67b98f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+ * 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 <Martin.Bosslet@googlemail.com>
+
* ext/openssl/ossl_asn1.c (ossl_asn1_cons_to_der): Add an additional
EOC for infinite length Constructives that are supposed to be encoded
with explicit tagging. Also tabify method correctly.
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);