Bug #4325 ยป fix_cons_encode_inf.diff
| ruby/ext/openssl/ossl_asn1.c (working copy) | ||
|---|---|---|
|
int found_prim = 0;
|
||
|
long seq_len, length;
|
||
|
unsigned char *p;
|
||
|
VALUE value, str, inf_length, ary, example;
|
||
|
VALUE value, str, inf_length, ary, example = Qnil;
|
||
|
tn = NUM2INT(ossl_asn1_get_tag(self));
|
||
|
tc = ossl_asn1_tag_class(self);
|
||
|
inf_length = ossl_asn1_get_infinite_length(self);
|
||
|
if (inf_length == Qtrue) {
|
||
|
constructed = 2;
|
||
|
if (CLASS_OF(self) == cASN1Sequence ||
|
||
|
CLASS_OF(self) == cASN1Set) {
|
||
|
if (rb_obj_is_kind_of(self, cASN1Sequence) ||
|
||
|
rb_obj_is_kind_of(self, cASN1Set)){
|
||
|
tag = ossl_asn1_default_tag(self);
|
||
|
}
|
||
|
else { /*BIT_STRING OR OCTET_STRING*/
|
||
|
else { /*must be a constructive encoding of a primitive value*/
|
||
|
if (!rb_obj_is_kind_of(self, cASN1Constructive)){
|
||
|
ossl_raise(eASN1Error, "invalid constructed encoding");
|
||
|
return Qnil; /* dummy */
|
||
|
}
|
||
|
ary = ossl_asn1_get_value(self);
|
||
|
/* Recursively descend until a primitive value is found.
|
||
|
The overall value of the entire constructed encoding
|
||
| ruby/test/openssl/test_asn1.rb (working copy) | ||
|---|---|---|
|
end
|
||
|
end
|
||
|
|
||
|
def test_encode_subclass_sequence
|
||
|
sub = Class.new(OpenSSL::ASN1::Sequence)
|
||
|
instance = sub.new([OpenSSL::ASN1::EndOfContent.new])
|
||
|
instance.infinite_length = true
|
||
|
puts instance.to_der
|
||
|
end
|
||
|
|
||
|
def test_encode_subclass_set
|
||
|
sub = Class.new(OpenSSL::ASN1::Set)
|
||
|
instance = sub.new([OpenSSL::ASN1::EndOfContent.new])
|
||
|
instance.infinite_length = true
|
||
|
puts instance.to_der
|
||
|
end
|
||
|
|
||
|
end if defined?(OpenSSL)
|
||