From: Pat Eyler Date: 2006-04-27T13:02:49+09:00 Subject: possible defect in ext/openssl/ossl_ans1.c (with fix) 768 VALUE klass = *ossl_asn1_info[tag].klass; Event var_decl: Declared variable "flag" without initializer Also see events: [uninit_use_in_call] 769 long flag; At conditional (1): "rb_obj_is_kind_of == 0" taking false path 770 if(!rb_obj_is_kind_of(value, rb_cArray)){ 771 switch(tag){ 772 case V_ASN1_BOOLEAN: 773 value = decode_bool(start, hlen+len); 774 break; 775 case V_ASN1_INTEGER: 776 value = decode_int(start, hlen+len); 777 break; 778 case V_ASN1_BIT_STRING: 779 value = decode_bstr(start, hlen+len, &flag); 780 break; 781 case V_ASN1_NULL: 782 value = decode_null(start, hlen+len); 783 break; 784 case V_ASN1_ENUMERATED: 785 value = decode_enum(start, hlen+len); 786 break; 787 case V_ASN1_OBJECT: 788 value = decode_obj(start, hlen+len); 789 break; 790 case V_ASN1_UTCTIME: /* FALLTHROUGH */ 791 case V_ASN1_GENERALIZEDTIME: 792 value = decode_time(start, hlen+len); 793 break; 794 default: 795 /* use original value */ 796 break; 797 } 798 } 799 asn1data = rb_funcall(klass, rb_intern("new"), 1, value); At conditional (2): "tag == 3" taking true path 800 if(tag == V_ASN1_BIT_STRING){ Event uninit_use_in_call: Using uninitialized value "flag" in call to function "rb_int2inum" [model] Also see events: [var_decl] 801 rb_iv_set(asn1data, "@unused_bits", LONG2NUM(flag)); 802 } 803 } here's the diff (which follows the advice I received from everyone after the last one.) diff -c -r1.13 ossl_asn1.c *** ext/openssl/ossl_asn1.c 3 Feb 2006 09:15:38 -0000 1.13 --- ext/openssl/ossl_asn1.c 27 Apr 2006 03:49:37 -0000 *************** *** 766,772 **** if(tag_class == sUNIVERSAL && tag < ossl_asn1_info_size && ossl_asn1_info[tag].klass){ VALUE klass = *ossl_asn1_info[tag].klass; ! long flag; if(!rb_obj_is_kind_of(value, rb_cArray)){ switch(tag){ case V_ASN1_BOOLEAN: --- 766,772 ---- if(tag_class == sUNIVERSAL && tag < ossl_asn1_info_size && ossl_asn1_info[tag].klass){ VALUE klass = *ossl_asn1_info[tag].klass; ! long flag = 0; if(!rb_obj_is_kind_of(value, rb_cArray)){ switch(tag){ case V_ASN1_BOOLEAN: