# OpenSSL 1.0.0 support

**URL:** <https://www.ruby-forum.com/t/openssl-1-0-0-support/173452>\
**Category:** Development\
**Created:** [August 9, 2009, 10:02am UTC](https://www.ruby-forum.com/t/openssl-1-0-0-support/173452 "2009-08-09T10:02:00Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [August 9, 2009, 10:02am UTC](https://www.ruby-forum.com/t/openssl-1-0-0-support/173452/1 "2009-08-09T10:02:00Z")

</div>

e$B$3$s$K$A$O!#e(B

NetBSD currente$B$Ke(BOpenSSL 1.0.0e$B7ONs$N$Je(Bsnap  
shote$B$,\<h$j9~$^$l$F$+$ie(BRubye$B$Ne(B  
openssle$B3HD%$,%3%s%Q%$%k$G$-$J$$$H$$$&Js9p$,$"$j$^$7$?!#e(B

e$B$6!\<$C$H8+D\>$7$F!"%&%)!\<%K%s%0$r8:$i$9J}8~$G=$@5$7$F$\_$^$7$?$,!"$+$J$je(B  
e$B$NJQ992U=j$,e(BOpenSSLe$B$K$"$k$3$H$,2~$a$F$o$+$j$^$7$?!#e(BRubye$B$N%Y!\<%9$O!"e(B  
Ruby 1.8.7 patchlevel 174e$B$G$9!#e(B

e$B$J$\*!“e(Bopenssl\_missing.he$B$”$?$j$O;C$/e(Bdowne$B$9$kA0$Ne(Bsvn.ruby-lang.orge$B$NJQ99e(B  
e$BE@$r$=$N$^$^:N$jF~$l$F$$$kItJ,$b$"$j$^$9!#0l1~!"e(B

- OpenSSL 1.1.0-dev 10 Jul 2009 on NetBSD current (5.99.15)
- OpenSSL 0.9.9-dev 09 May 2008 on NetBSD 5.0\_STABLE
- OpenSSL 0.9.8e 23 Feb 2007 on NetBSD 4.0\_STABLE

e$B$G%3%s%Q%$%k$r3NG’$7$^$7$?!#e(BOpenSSL  
1.1.0-deve$B0J30$O%&%)!\<%K%s%0$r$J$/e(B  
e$B$9$3$H$,$G$-$^$7$?!#e(B

OpenSSL  
1.1.0-deve$B$O!"e(Bossl\_x509attr.ce$B$Ne(Bossl\_x509attr\_get\_value()e$B$G!"e(B

ossl\_x509attr.c:220: warning: passing argument 1 of ‘i2d\_ASN1\_SET’ from  
incompat  
ible pointer type  
ossl\_x509attr.c:224: warning: passing argument 1 of ‘i2d\_ASN1\_SET’ from  
incompat  
ible pointer type

e$B$H!"$J$j$^$9!#3:Ev2U=j$O!“0J2\<$Ne(Bi2d\_ASN1\_SET\_OF\_ASN1\_TYPEe$B$,E83+$5$l$?e(B  
e$B8e$Ne(Bi2d\_ASN1\_SET()e$B$NBhe(B1e$B0z?t$H$$$&$3$H$K$J$j$^$9$,!”$3$l$O$h$/$o$+$j$^e(B  
e$B$;$s$G$7$?$,!"$J$s$+$^$:$=$&$Je(B…?

```
else{

```

length = i2d\_ASN1\_SET\_OF\_ASN1\_TYPE(attr-\>value.set, NULL,  
i2d\_ASN1\_TYPE, V\_ASN1\_SET, V\_ASN1\_UNIVERSAL, 0);  
str = rb\_str\_new(0, length);  
p = RSTRING\_PTR(str);  
i2d\_ASN1\_SET\_OF\_ASN1\_TYPE(attr-\>value.set, &p,  
i2d\_ASN1\_TYPE, V\_ASN1\_SET, V\_ASN1\_UNIVERSAL, 0);  
ossl\_str\_adjust(str, p);  
}

0.9.8e$B$h$j8E$$!"e(BOpenSSLe$B$Ne(B0.9.6e$B$de(B0.9.7e$B$G$N3NG’$O$G$-$F$$$^$;$s!#e(B

e$B0J2\<!"%Q%C%A$NFbMF$N$^$H$a$G$9!#e(B

openssl\_missing.h

- i2d\_of\_voide$B7?$r;H$C$F!"%&%)!\<%K%s%0$r$J$/$9=$@5!#e(B

ossl.h

- OpenSSL  
0.9.9e$B0J9\_$G$@$1e(Bconste$B$H$9$ke(BOSSL\_CONSTe$B$rDI2C!#e(B

ossl.c

- OSSL\_IMPL\_SK2ARY()e$B%^%/%mCf$NJQ99!#e(B
  - OpenSSL  
1.0.0e$B0J9\_$Ge(BSTACKe$B$Oe(B\_STACKe$B$HL\>A0$,JQ99$5$l$F$$e(B  
e$B$k$3$H$b$"$j!"D\>@;HMQ$9$kBe$o$j$Ke(BSTACK\_OF()e$B%^%/%m$re(B  
e$B;HMQ$9$k$h$&$K=$@5!#e(B
  - sk\_num()e$B$de(Bsk\_value()e$B$r%-%c%9%H$7$F;HMQ$9$k$N$G$O$J$/!"e(B  
e$B\<B:]$N7?MQ$K@8@.$5$l$F$$$k4X?t$r;HMQ$9$k$h$&$K=$@5!#e(B

ossl\_asn1.c  
ossl\_cipher.c  
ossl\_engine.c  
ossl\_ns\_spki.c  
ossl\_ocsp.c  
ossl\_x509attr.c  
ossl\_x509cert.c  
ossl\_x509ext.c  
ossl\_x509name.c

- conste$BDI2C!#e(B

ossl\_config.c

- IMPLEMENT\_LHASH\_DOALL\_ARG\_FN()e$B$N%Q%i%a!\<%?$KEO$5$l$?4X?tL\>$Oe(B  
e$B$=$N$^$^;HMQ$5$l$:!“e(B”\_doall\_arg"e$B$rIU2C$7$?4X?t$r8F$S=P$9$h$&e(B  
e$B$KJQ99$5$l$?$3$H$X$NBP1~!#e(B(OpenSSL 1.0.0)e$B0J9\_e(B
- 

lh\_doall\_arg()e$B$rD\>@;H$&$N$G$O$J$/!"e(BLHM\_lh\_doall\_arg()e$B$r;HMQe(B  
e$B$9$k$h$&$KJQ99!#e(B(OpenSSL 1.0.0)e$B0J9\_e(B

- conste$BDI2C!#e(B

ossl\_pkcs7.c  
\*  
certse$B$+e(Bcrlse$B$N$$$:$l$+$rJV$9$H$$$&e(Bpkcs7\_get\_certs\_or\_crls()e$B$O!"e(B  
e$B\<B9TA0$K$I$A$i$rJV$9$+$O7h$^$C$F$$$k$3$H$+$i!“JL!9$N4X?t$KJ,e(B  
e$BN%$7$?\>e$G!”$=$l$\>$l$K1~$8$?7?$rJV$94X?t$KJQ99!#e(B  
(e$B85$Ne(Bpkcs7\_get\_certs\_or\_crls()e$B$O!"L5M}LpM}%3!\<%I$r6&MQ$7$h$&e(B  
e$B$H$7$F$$$?$h$&$K8+$($^$9!#e(B)

ossl\_ssl.c

- OpenSSL 0.9.9e$B0J9\_$@$1$Ne(Bconste$BDI2Ce(B(OSSL\_CONST)e$B!#e(B
- conste$BDI2C!#e(B
- 

e$B%-%c%9%H$H6&$Ke(Bsk\_num()e$B$de(Bsk\_value()e$B$r;HMQ$9$k$N$G$O$J$/!"$=$le(B  
e$B$\>$l$N7?$K1~$8$FMQ0U$5$l$F$$$k4X?t$r;HMQ!#e(B

ossl\_x509crl.c  
\*  
sk\_X509\_REVOKED\_num()e$B$r;HMQ$9$Y$-$H$3$m$Ke(Bsk\_X509\_CRL\_num()e$B$re(B  
e$B;HMQ$7$F$$$ke(B(?)e$B$N$r=$@5!#e(B

e$B0J\>e!"$\*$=$i$/e(BRuby 1.9e$BEy$bF1MM$N1F6A$O$"$k$H;W$$$^$9!#e(B

–  
e$B?@8Me(B e$BN4Gne(B / Takahiro K.

Index: ext/openssl/openssl\_missing.h

— ext/openssl/openssl\_missing.h.orig 2008-08-04 13:44:17.000000000  
+0900  
+++ ext/openssl/openssl\_missing.h  
@@ -18,6 +18,9 @@ extern “C” {  
#ifndef TYPEDEF\_D2I\_OF  
typedef char \*d2i\_of\_void();  
#endif  
+#ifndef TYPEDEF\_I2D\_OF  
+typedef int i2d\_of\_void();  
+#endif

/\*

- These functions are not included in headers of OPENSSL \<= 0.9.6b  
@@ -25,39 +28,39 @@ typedef char \*d2i\_of\_void();

#if !defined(PEM\_read\_bio\_DSAPublicKey)

# define PEM\_read\_bio\_DSAPublicKey(bp,x,cb,u) (DSA \*)PEM\_ASN1\_read\_bio(

\

- 

```
   (char *(*)())d2i_DSAPublicKey,PEM_STRING_DSA_PUBLIC,bp,(char 

```

\*\*)x,cb,u)

- 

```
   (d2i_of_void 

```

\*)d2i\_DSAPublicKey,PEM\_STRING\_DSA\_PUBLIC,bp,x,cb,u)  
#endif

#if !defined(PEM\_write\_bio\_DSAPublicKey)

# define PEM\_write\_bio\_DSAPublicKey(bp,x) \

- PEM\_ASN1\_write\_bio((int (\*)())i2d\_DSAPublicKey,\

- PEM\_ASN1\_write\_bio((i2d\_of\_void \*)i2d\_DSAPublicKey,  
PEM\_STRING\_DSA\_PUBLIC,  
bp,(char \*)x, NULL, NULL, 0, NULL, NULL)  
#endif

#if !defined(DSAPrivateKey\_dup)  
-# define DSAPrivateKey\_dup(dsa) (DSA _)ASN1\_dup((int  
(_)())i2d\_DSAPrivateKey, \

- (char _(_)())d2i\_DSAPrivateKey,(char \*)dsa)  
+# define DSAPrivateKey\_dup(dsa) (DSA \*)ASN1\_dup((i2d\_of\_void  
\*)i2d\_DSAPrivateKey, \

- (d2i\_of\_void \*)d2i\_DSAPrivateKey,(char \*)dsa)  
#endif

#if !defined(DSAPublicKey\_dup)  
-# define DSAPublicKey\_dup(dsa) (DSA _)ASN1\_dup((int  
(_)())i2d\_DSAPublicKey, \

- (char _(_)())d2i\_DSAPublicKey,(char \*)dsa)  
+# define DSAPublicKey\_dup(dsa) (DSA \*)ASN1\_dup((i2d\_of\_void  
\*)i2d\_DSAPublicKey, \

- (d2i\_of\_void \*)d2i\_DSAPublicKey,(char \*)dsa)  
#endif

#if !defined(X509\_REVOKED\_dup)  
-# define X509\_REVOKED\_dup(rev) (X509\_REVOKED _)ASN1\_dup((int  
(_)())i2d\_X509\_REVOKED, \

- (char _(_)())d2i\_X509\_REVOKED, (char \*)rev)  
+# define X509\_REVOKED\_dup(rev) (X509\_REVOKED \*)ASN1\_dup((i2d\_of\_void  
\*)i2d\_X509\_REVOKED, \

- (d2i\_of\_void \*)d2i\_X509\_REVOKED, (char \*)rev)  
#endif

#if !defined(PKCS7\_SIGNER\_INFO\_dup)  
-# define PKCS7\_SIGNER\_INFO\_dup(si) (PKCS7\_SIGNER\_INFO _)ASN1\_dup((int  
(_)())i2d\_PKCS7\_SIGNER\_INFO, \

- (char _(_)())d2i\_PKCS7\_SIGNER\_INFO, (char \*)si)  
+# define PKCS7\_SIGNER\_INFO\_dup(si) (PKCS7\_SIGNER\_INFO  
\*)ASN1\_dup((i2d\_of\_void \*)i2d\_PKCS7\_SIGNER\_INFO, \

- (d2i\_of\_void \*)d2i\_PKCS7\_SIGNER\_INFO, (char \*)si)  
#endif

#if !defined(PKCS7\_RECIP\_INFO\_dup)  
-# define PKCS7\_RECIP\_INFO\_dup(ri) (PKCS7\_RECIP\_INFO _)ASN1\_dup((int  
(_)())i2d\_PKCS7\_RECIP\_INFO, \

- (char _(_)())d2i\_PKCS7\_RECIP\_INFO, (char \*)ri)  
+# define PKCS7\_RECIP\_INFO\_dup(ri) (PKCS7\_RECIP\_INFO  
\*)ASN1\_dup((i2d\_of\_void \*)i2d\_PKCS7\_RECIP\_INFO, \

- (d2i\_of\_void \*)d2i\_PKCS7\_RECIP\_INFO, (char \*)ri)  
#endif

#if !defined(HAVE\_EVP\_MD\_CTX\_INIT)  
Index: ext/openssl/ossl.h

— ext/openssl/ossl.h.orig 2008-06-29 17:16:02.000000000 +0900  
+++ ext/openssl/ossl.h  
@@ -74,6 +74,12 @@ extern “C” {

# include \<openssl/ocsp.h\>

#endif

+#if OPENSSL\_VERSION\_NUMBER \>= 0x00909000L  
+#define OSSL\_CONST const  
+#else  
+#define OSSL\_CONST  
+#endif  
+  
/\*

- Common Module  
\*/  
Index: ext/openssl/ossl.c

— ext/openssl/ossl.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl.c  
@@ -92,7 +92,7 @@ ossl\_x509\_ary2sk(VALUE ary)

#define OSSL\_IMPL\_SK2ARY(name, type)   
VALUE   
-ossl\_##name##_sk2ary(STACK \*sk)   
+ossl_##name##_sk2ary(STACK\_OF(type) \*sk)   
{   
type \*t;   
int i, num;   
@@ -102,7 +102,7 @@ ossl_##name##\_sk2ary(STACK \*sk)   
OSSL\_Debug(“empty sk!”);   
return Qnil;   
} \

- num = sk\_num(sk); \

- num = sk\_##type##_num(sk);   
if (num \< 0) {   
OSSL\_Debug(“items in sk \< -1???”);   
return rb\_ary\_new();   
@@ -110,7 +110,7 @@ ossl_##name##\_sk2ary(STACK \*sk)   
ary = rb\_ary\_new2(num);   
  
for (i=0; i\<num; i++) { \

- t = (type \*)sk\_value(sk, i); \

- t = sk\_##type##_value(sk, i);   
rb\_ary\_push(ary, ossl_##name##\_new(t));   
}   
return ary;   
Index: ext/openssl/ossl\_asn1.c

— ext/openssl/ossl\_asn1.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_asn1.c  
@@ -304,10 +304,10 @@ obj\_to\_asn1derstr(VALUE obj)

- DER to Ruby converters  
_/  
static VALUE  
-decode\_bool(unsigned char_ der, int length)  
+decode\_bool(const unsigned char\* der, int length)  
{  
int bool;

- unsigned char \*p;

- const unsigned char \*p;

static VALUE  
-decode\_int(unsigned char\* der, int length)  
+decode\_int(const unsigned char\* der, int length)  
{  
ASN1\_INTEGER \*ai;

- unsigned char \*p;

- const unsigned char \*p;  
VALUE ret;  
int status = 0;

@@ -336,10 +336,11 @@ decode\_int(unsigned char\* der, int lengt  
}

static VALUE  
-decode\_bstr(unsigned char\* der, int length, long _unused\_bits)  
+decode\_bstr(const unsigned char_ der, int length, long \*unused\_bits)  
{  
ASN1\_BIT\_STRING \*bstr;

- unsigned char \*p, \*buf;

- const unsigned char \*p;
- unsigned char \*buf;  
long len;  
VALUE ret;

@@ -362,10 +363,10 @@ decode\_bstr(unsigned char\* der, int leng  
}

static VALUE  
-decode\_enum(unsigned char\* der, int length)  
+decode\_enum(const unsigned char\* der, int length)  
{  
ASN1\_ENUMERATED \*ai;

- unsigned char \*p;

- const unsigned char \*p;  
VALUE ret;  
int status = 0;

@@ -381,10 +382,10 @@ decode\_enum(unsigned char\* der, int leng  
}

static VALUE  
-decode\_null(unsigned char\* der, int length)  
+decode\_null(const unsigned char\* der, int length)  
{  
ASN1\_NULL \*null;

- unsigned char \*p;

- const unsigned char \*p;

static VALUE  
-decode\_obj(unsigned char\* der, int length)  
+decode\_obj(const unsigned char\* der, int length)  
{  
ASN1\_OBJECT \*obj;

- unsigned char \*p;

- const unsigned char \*p;  
VALUE ret;  
int nid;  
BIO _bio;  
@@ -424,10 +425,10 @@ decode\_obj(unsigned char_ der, int lengt  
}

static VALUE  
-decode\_time(unsigned char\* der, int length)  
+decode\_time(const unsigned char\* der, int length)  
{  
ASN1\_TIME \*time;

- unsigned char \*p;

- const unsigned char \*p;  
VALUE ret;  
int status = 0;

@@ -712,10 +713,10 @@ ossl\_asn1data\_to\_der(VALUE self)  
}

static VALUE  
-ossl\_asn1\_decode0(unsigned char \*\*pp, long length, long \*offset, long  
depth,

- 

```
 int once, int yield)

```

+ossl\_asn1\_decode0(const unsigned char \*\*pp, long length, long \*offset,

- 

```
 long depth, int once, int yield)

```

{

- unsigned char \*start, \*p;

- const unsigned char \*p, \*start;  
long len, off = \*offset;  
int hlen, tag, tc, j;  
VALUE ary, asn1data, value, tag\_class;  
@@ -818,7 +819,7 @@ ossl\_asn1\_decode0(unsigned char \*\*pp, lo  
static VALUE  
ossl\_asn1\_traverse(VALUE self, VALUE obj)  
{

- unsigned char \*p;

- const unsigned char \*p;  
long offset = 0;  
volatile VALUE tmp;

@@ -834,7 +835,7 @@ static VALUE  
ossl\_asn1\_decode(VALUE self, VALUE obj)  
{  
VALUE ret, ary;

- unsigned char \*p;

- const unsigned char \*p;  
long offset = 0;  
volatile VALUE tmp;

@@ -851,7 +852,7 @@ static VALUE  
ossl\_asn1\_decode\_all(VALUE self, VALUE obj)  
{  
VALUE ret;

- unsigned char \*p;

- const unsigned char \*p;  
long offset = 0;  
volatile VALUE tmp;

Index: ext/openssl/ossl\_cipher.c

— ext/openssl/ossl\_cipher.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_cipher.c  
@@ -186,7 +186,7 @@ ossl\_cipher\_init(int argc, VALUE \*argv,  
\* We deprecated the arguments for this method, but we decided  
\* keeping this behaviour for backward compatibility.  
\*/

- char \*cname = rb\_class2name(rb\_obj\_class(self));

- const char \*cname = rb\_class2name(rb\_obj\_class(self));  
rb\_warn("argumtents for %s#encrypt and %s#decrypt were deprecated; "  
“use %s#pkcs5\_keyivgen to derive key and IV”,  
cname, cname, cname);  
@@ -307,7 +307,7 @@ ossl\_cipher\_pkcs5\_keyivgen(int argc, VAL  
static VALUE  
ossl\_cipher\_update\_deprecated(VALUE self, VALUE data)  
{

- char \*cname;

- const char \*cname;

— ext/openssl/ossl\_config.c.orig 2007-07-20 15:22:54.000000000 +0900  
+++ ext/openssl/ossl\_config.c  
@@ -293,12 +293,27 @@ ossl\_config\_get\_section\_old(VALUE self,  
}

#ifdef IMPLEMENT\_LHASH\_DOALL\_ARG\_FN  
+  
+#if OPENSSL\_VERSION\_NUMBER \>= 0x10000000L  
+static void  
+get\_conf\_section\_doall\_arg(void \*arg1, void \*arg2)  
+{

- CONF\_VALUE \*cv;
- VALUE ary;
- 
- cv = arg1;
- ary = (VALUE)arg2;
- if(cv-\>name) return;
- rb\_ary\_push(ary, rb\_str\_new2(cv-\>section));  
+}  
+#else  
static void  
get\_conf\_section(CONF\_VALUE \*cv, VALUE ary)  
{  
if(cv-\>name) return;  
rb\_ary\_push(ary, rb\_str\_new2(cv-\>section));  
}  
+#endif

static IMPLEMENT\_LHASH\_DOALL\_ARG\_FN(get\_conf\_section, CONF\_VALUE\*,  
VALUE);

@@ -310,11 +325,44 @@ ossl\_config\_get\_sections(VALUE self)

```
 GetConfig(self, conf);
 ary = rb_ary_new();

```

- 

+#if OPENSSL\_VERSION\_NUMBER \>= 0x10000000L

- LHM\_lh\_doall\_arg(CONF\_VALUE, conf-\>data,
- 

```
    LHASH_DOALL_ARG_FN(get_conf_section), void, (void*)ary);

```

+#else  
lh\_doall\_arg(conf-\>data, LHASH\_DOALL\_ARG\_FN(get\_conf\_section),  
(void\*)ary);  
+#endif

```
 return ary;

```

}

+#if OPENSSL\_VERSION\_NUMBER \>= 0x10000000L  
+static void  
+dump\_conf\_value\_doall\_arg(void \*arg1, void \*arg2)  
+{

- STACK\_OF(CONF\_VALUE) \*sk;
- CONF\_VALUE \*cv, \*v;
- VALUE str;
- int i, num;
- 
- cv = arg1;
- if (cv-\>name) return;
- str = (VALUE)arg2;
- sk = (STACK\_OF(CONF\_VALUE)\*)cv-\>value;
- num = sk\_CONF\_VALUE\_num(sk);
- rb\_str\_cat2(str, "[ ");
- rb\_str\_cat2(str, cv-\>section);
- rb\_str\_cat2(str, " ]\n");
- for(i = 0; i \< num; i++){
- v = sk\_CONF\_VALUE\_value(sk, i);
- rb\_str\_cat2(str, v-\>name ? v-\>name : “None”);
- rb\_str\_cat2(str, “=”);
- rb\_str\_cat2(str, v-\>value ? v-\>value : “None”);
- rb\_str\_cat2(str, “\n”);
- }
- rb\_str\_cat2(str, “\n”);  
+}  
+#else  
static void  
dump\_conf\_value(CONF\_VALUE \*cv, VALUE str)  
{  
@@ -337,6 +385,7 @@ dump\_conf\_value(CONF\_VALUE \*cv, VALUE st  
}  
rb\_str\_cat2(str, “\n”);  
}  
+#endif

static IMPLEMENT\_LHASH\_DOALL\_ARG\_FN(dump\_conf\_value, CONF\_VALUE\*,  
VALUE);

@@ -346,7 +395,12 @@ dump\_conf(CONF \*conf)  
VALUE str;

```
 str = rb_str_new(0, 0);

```

+#if OPENSSL\_VERSION\_NUMBER \>= 0x10000000L

- LHM\_lh\_doall\_arg(CONF\_VALUE, conf-\>data,
- 

```
    LHASH_DOALL_ARG_FN(dump_conf_value), void, (void*)str);

```

+#else  
lh\_doall\_arg(conf-\>data, LHASH\_DOALL\_ARG\_FN(dump\_conf\_value),  
(void\*)str);  
+#endif

```
 return str;

```

}  
@@ -361,8 +415,32 @@ ossl\_config\_to\_s(VALUE self)  
return dump\_conf(conf);  
}

+#if OPENSSL\_VERSION\_NUMBER \>= 0x10000000L  
+static void  
+each\_conf\_value\_doall\_arg(void _arg1, void_ dummy)  
+{

- STACK\_OF(CONF\_VALUE) \*sk;
- CONF\_VALUE \*cv, \*v;
- VALUE section, name, value, args;
- int i, num;
- 
- cv = arg1;
- if (cv-\>name) return;
- sk = (STACK\_OF(CONF\_VALUE)\*)cv-\>value;
- num = sk\_CONF\_VALUE\_num(sk);
- section = rb\_str\_new2(cv-\>section);
- for(i = 0; i \< num; i++){
- v = sk\_CONF\_VALUE\_value(sk, i);
- name = v-\>name ? rb\_str\_new2(v-\>name) : Qnil;
- value = v-\>value ? rb\_str\_new2(v-\>value) : Qnil;
- 

```
   args = rb_ary_new3(3, section, name, value);

```

- rb\_yield(args);
- }  
+}  
+#else  
static void  
-each\_conf\_value(CONF\_VALUE _cv, void_ dummy)  
+each\_conf\_value  
+(CONF\_VALUE _cv, void_ dummy)  
{  
STACK\_OF(CONF\_VALUE) \*sk;  
CONF\_VALUE \*v;  
@@ -381,6 +459,7 @@ each\_conf\_value(CONF\_VALUE _cv, void_ du  
rb\_yield(args);  
}  
}  
+#endif

static IMPLEMENT\_LHASH\_DOALL\_ARG\_FN(each\_conf\_value, CONF\_VALUE\*,  
void\*);

@@ -390,7 +469,12 @@ ossl\_config\_each(VALUE self)  
CONF \*conf;

```
 GetConfig(self, conf);

```

+#if OPENSSL\_VERSION\_NUMBER \>= 0x10000000L

- LHM\_lh\_doall\_arg(CONF\_VALUE, conf-\>data,
- 

```
    LHASH_DOALL_ARG_FN(each_conf_value), void, (void*)NULL);

```

+#else  
lh\_doall\_arg(conf-\>data, LHASH\_DOALL\_ARG\_FN(each\_conf\_value),  
(void\*)NULL);  
+#endif

```
 return self;

```

}  
@@ -421,7 +505,7 @@ static VALUE  
ossl\_config\_inspect(VALUE self)  
{  
VALUE str, ary = ossl\_config\_get\_sections(self);

- char \*cname = rb\_class2name(rb\_obj\_class(self));

- const char \*cname = rb\_class2name(rb\_obj\_class(self));

— ext/openssl/ossl\_engine.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_engine.c  
@@ -326,7 +326,7 @@ static VALUE  
ossl\_engine\_inspect(VALUE self)  
{  
VALUE str;

- char \*cname = rb\_class2name(rb\_obj\_class(self));

- const char \*cname = rb\_class2name(rb\_obj\_class(self));

— ext/openssl/ossl\_ns\_spki.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_ns\_spki.c  
@@ -56,7 +56,7 @@ ossl\_spki\_initialize(int argc, VALUE \*ar  
{  
NETSCAPE\_SPKI \*spki;  
VALUE buffer;

- unsigned char \*p;

- const unsigned char \*p;

— ext/openssl/ossl\_ocsp.c.orig 2009-03-09 20:59:27.000000000 +0900  
+++ ext/openssl/ossl\_ocsp.c  
@@ -103,7 +103,7 @@ static VALUE  
ossl\_ocspreq\_initialize(int argc, VALUE \*argv, VALUE self)  
{  
VALUE arg;

- unsigned char \*p;

- const unsigned char \*p;

- unsigned char \*p;

- const unsigned char \*p;

— ext/openssl/ossl\_pkcs7.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_pkcs7.c  
@@ -570,12 +570,11 @@ ossl\_pkcs7\_add\_certificate(VALUE self, V  
return self;  
}

-static STACK \*  
-pkcs7\_get\_certs\_or\_crls(VALUE self, int want\_certs)  
+static STACK\_OF(X509) \*  
+pkcs7\_get\_certs(VALUE self)  
{  
PKCS7 \*pkcs7;  
STACK\_OF(X509) \*certs;

- STACK\_OF(X509\_CRL) \*crls;  
int i;

- 

```
   crls = pkcs7->d.sign->crl;
   break;

```

case NID\_pkcs7\_signedAndEnveloped:  
certs = pkcs7-\>d.signed\_and\_enveloped-\>cert;

- 

```
   break;

```

- default:
- 

```
   certs = NULL;

```

- }
- 
- return certs;  
+}
- 

+static STACK\_OF(X509\_CRL) \*  
+pkcs7\_get\_crls(VALUE self)  
+{

- PKCS7 \*pkcs7;
- STACK\_OF(X509\_CRL) \*crls;
- int i;
- 
- GetPKCS7(self, pkcs7);
- i = OBJ\_obj2nid(pkcs7-\>type);
- switch(i){
- case NID\_pkcs7\_signed:
- 

```
   crls = pkcs7->d.sign->crl;

```

- 

```
   break;

```

- case NID\_pkcs7\_signedAndEnveloped:  
crls = pkcs7-\>d.signed\_and\_enveloped-\>crl;  
break;  
default:

- 

```
   certs = crls = NULL;

```

- 

```
   crls = NULL;

```

}

- return want\_certs ? certs : crls;

- return crls;  
}

static VALUE  
@@ -608,7 +628,7 @@ ossl\_pkcs7\_set\_certificates(VALUE self,  
STACK\_OF(X509) \*certs;  
X509 \*cert;

- certs = pkcs7\_get\_certs\_or\_crls(self, 1);

- certs = pkcs7\_get\_certs(self);  
while((cert = sk\_X509\_pop(certs))) X509\_free(cert);  
rb\_block\_call(ary, rb\_intern(“each”), 0, 0, ossl\_pkcs7\_set\_certs\_i,  
self);

@@ -618,7 +638,7 @@ ossl\_pkcs7\_set\_certificates(VALUE self,  
static VALUE  
ossl\_pkcs7\_get\_certificates(VALUE self)  
{

- return ossl\_x509\_sk2ary(pkcs7\_get\_certs\_or\_crls(self, 1));

- return ossl\_x509\_sk2ary(pkcs7\_get\_certs(self));  
}

static VALUE  
@@ -648,7 +668,7 @@ ossl\_pkcs7\_set\_crls(VALUE self, VALUE ar  
STACK\_OF(X509\_CRL) \*crls;  
X509\_CRL \*crl;

- crls = pkcs7\_get\_certs\_or\_crls(self, 0);

- crls = pkcs7\_get\_crls(self);  
while((crl = sk\_X509\_CRL\_pop(crls))) X509\_CRL\_free(crl);  
rb\_block\_call(ary, rb\_intern(“each”), 0, 0, ossl\_pkcs7\_set\_crls\_i,  
self);

@@ -658,7 +678,7 @@ ossl\_pkcs7\_set\_crls(VALUE self, VALUE ar  
static VALUE  
ossl\_pkcs7\_get\_crls(VALUE self)  
{

- return ossl\_x509crl\_sk2ary(pkcs7\_get\_certs\_or\_crls(self, 0));

- return ossl\_x509crl\_sk2ary(pkcs7\_get\_crls(self));  
}

static VALUE  
Index: ext/openssl/ossl\_ssl.c

— ext/openssl/ossl\_ssl.c.orig 2008-06-06 17:05:24.000000000 +0900  
+++ ext/openssl/ossl\_ssl.c  
@@ -95,7 +95,7 @@ ID ID\_callback\_state;  
\*/  
struct {  
const char \*name;

- SSL\_METHOD \*(\*func)(void);

- OSSL\_CONST SSL\_METHOD \*(\*func)(void);  
} ossl\_ssl\_method\_tab[] = {  
#define OSSL\_SSL\_METHOD\_ENTRY(name) { #name, name##\_method }  
OSSL\_SSL\_METHOD\_ENTRY(TLSv1),  
@@ -144,7 +144,7 @@ ossl\_sslctx\_s\_alloc(VALUE klass)  
static VALUE  
ossl\_sslctx\_set\_ssl\_version(VALUE self, VALUE ssl\_method)  
{

- SSL\_METHOD \*method = NULL;

- OSSL\_CONST SSL\_METHOD \*method = NULL;  
const char \*s;  
int i;

@@ -585,7 +585,7 @@ ossl\_sslctx\_setup(VALUE self)  
}

static VALUE  
-ossl\_ssl\_cipher\_to\_ary(SSL\_CIPHER \*cipher)  
+ossl\_ssl\_cipher\_to\_ary(const SSL\_CIPHER \*cipher)  
{  
VALUE ary;  
int bits, alg\_bits;  
@@ -623,10 +623,10 @@ ossl\_sslctx\_get\_ciphers(VALUE self)  
if (!ciphers)  
return rb\_ary\_new();

- num = sk\_num((STACK\*)ciphers);

- num = sk\_SSL\_CIPHER\_num(ciphers);  
ary = rb\_ary\_new2(num);  
for(i = 0; i \< num; i++){

- 

```
   cipher = (SSL_CIPHER*)sk_value((STACK*)ciphers, i);

```

- 

```
   cipher = sk_SSL_CIPHER_value(ciphers, i);
   rb_ary_push(ary, ossl_ssl_cipher_to_ary(cipher));

```

}  
return ary;  
@@ -1196,10 +1196,10 @@ ossl\_ssl\_get\_peer\_cert\_chain(VALUE self)  
}  
chain = SSL\_get\_peer\_cert\_chain(ssl);  
if(!chain) return Qnil;

- num = sk\_num(chain);

- num = sk\_X509\_num(chain);  
ary = rb\_ary\_new2(num);  
for (i = 0; i \< num; i++){

- cert = (X509\*)sk\_value(chain, i);

- cert = sk\_X509\_value(chain, i);  
rb\_ary\_push(ary, ossl\_x509\_new(cert));  
}

@@ -1214,7 +1214,7 @@ static VALUE  
ossl\_ssl\_get\_cipher(VALUE self)  
{  
SSL \*ssl;

- SSL\_CIPHER \*cipher;

- const SSL\_CIPHER \*cipher;

— ext/openssl/ossl\_x509attr.c.orig 2007-06-09 00:02:04.000000000  
+0900  
+++ ext/openssl/ossl\_x509attr.c  
@@ -93,7 +93,7 @@ ossl\_x509attr\_initialize(int argc, VALUE  
{  
VALUE oid, value;  
X509\_ATTRIBUTE \*attr;

- unsigned char \*p;

- const unsigned char \*p;

— ext/openssl/ossl\_x509cert.c.orig 2007-06-09 00:02:04.000000000  
+0900  
+++ ext/openssl/ossl\_x509cert.c  
@@ -690,7 +690,7 @@ static VALUE  
ossl\_x509\_inspect(VALUE self)  
{  
VALUE str;

- char \*cname = rb\_class2name(rb\_obj\_class(self));

- const char \*cname = rb\_class2name(rb\_obj\_class(self));

— ext/openssl/ossl\_x509crl.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_x509crl.c  
@@ -262,7 +262,7 @@ ossl\_x509crl\_get\_revoked(VALUE self)  
VALUE ary, revoked;

```
 GetX509CRL(self, crl);

```

- num = sk\_X509\_CRL\_num(X509\_CRL\_get\_REVOKED(crl));

- num = sk\_X509\_REVOKED\_num(X509\_CRL\_get\_REVOKED(crl));  
if (num \< 0) {  
OSSL\_Debug(“num \< 0???”);  
return rb\_ary\_new();  
@@ -270,7 +270,7 @@ ossl\_x509crl\_get\_revoked(VALUE self)  
ary = rb\_ary\_new2(num);  
for(i=0; i\<num; i++) {  
/\* NO DUP - don’t free! \*/

- rev = (X509\_REVOKED \*)sk\_X509\_CRL\_value(X509\_CRL\_get\_REVOKED(crl),  
i);

- rev = sk\_X509\_REVOKED\_value(X509\_CRL\_get\_REVOKED(crl), i);  
revoked = ossl\_x509revoked\_new(rev);  
rb\_ary\_push(ary, revoked);  
}  
Index: ext/openssl/ossl\_x509ext.c

— ext/openssl/ossl\_x509ext.c.orig 2007-06-09 00:02:04.000000000 +0900  
+++ ext/openssl/ossl\_x509ext.c  
@@ -273,7 +273,7 @@ static VALUE  
ossl\_x509ext\_initialize(int argc, VALUE \*argv, VALUE self)  
{  
VALUE oid, value, critical;

- unsigned char \*p;

- const unsigned char \*p;  
X509\_EXTENSION \*ext;

— ext/openssl/ossl\_x509name.c.orig 2007-07-15 22:24:51.000000000  
+0900  
+++ ext/openssl/ossl\_x509name.c  
@@ -135,7 +135,7 @@ ossl\_x509name\_initialize(int argc, VALUE  
rb\_block\_call(tmp, rb\_intern(“each”), 0, 0, ossl\_x509name\_init\_i,  
args);  
}  
else{

- 

```
 unsigned char *p;

```

- 

```
 const unsigned char *p;
 VALUE str = ossl_to_der_if_possible(arg);
 StringValue(str);
 p = RSTRING_PTR(str);
```

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [August 11, 2009, 2:53pm UTC](https://www.ruby-forum.com/t/openssl-1-0-0-support/173452/2 "2009-08-11T14:53:50Z")

</div>

e$B$3$s$P$s$O!#e(B

e$B\<c43$N0lIt$NFbMF$N=$@5$H%Q%C%A$NNL$r8:$i$9J}8~$G$N@0M}$r9T$$$^$7$?!#e(B

e$B$^$?!“e(BRuby 1.9.1 patchlevel 243 e$B$He(B Ruby 1.9.2  
preview1e$BMQ$N%Q%C%A$b:n@.e(B  
e$B$7$F$\_$^$7$?!#$$$:$l$b!”%3%s%Q%$%k$KLdBj$,$J$$$H$3$m$^$G$N3NG’$O$7$F$$e(B  
e$B$^$9!#e(B

e$B0J2\<$Ne(BURLe$B$G%"%/%;%9$G$-$k$h$&$K$7$F$"$j$^$9!#e(B

ftp://ftp.back-street.net/pub/ruby/openssl-1/ruby-1.8.7p174-openssl1-patch.bz2  
ftp://ftp.back-street.net/pub/ruby/openssl-1/ruby-1.9.1p243-openssl1-patch.bz2  
ftp://ftp.back-street.net/pub/ruby/openssl-1/ruby-1.9.2pre1-openssl1-patch.bz2

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [October 17, 2009, 5:06pm UTC](https://www.ruby-forum.com/t/openssl-1-0-0-support/173452/3 "2009-10-17T17:06:51Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Takahiro K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$^$?!“e(BRuby 1.9.1 patchlevel 243 e$B$He(B Ruby 1.9.2 preview1e$BMQ$N%Q%C%A$b:n@.e(B  
> e$B$7$F$\_$^$7$?!#$$$:$l$b!”%3%s%Q%$%k$KLdBj$,$J$$$H$3$m$^$G$N3NG’$O$7$F$$e(B  
> e$B$^$9!#e(B

> ftp://ftp.back-street.net/pub/ruby/openssl-1/ruby-1.9.2pre1-openssl1-patch.bz2

openssl-1.0.0-beta3 e$B$HAH$\_9g$o$;$F;n$9$H!“%3%s%Q%$%k$G$-$k$he(B  
e$B$&$K$J$k$N$ONI$$$N$G$9$,!”%F%9%H$Ge(B SEGV e$B$7$^$9$M$'!#e(B

% ./ruby test/runner.rb -v openssl  
Loaded suite test/runner  
Started  
OpenSSL::TestASN1#test\_decode: 0.03 s: .  
OpenSSL::TestCipher#test\_AES: 0.10 s: .  
OpenSSL::TestCipher#test\_ciphers: 0.00 s: .  
OpenSSL::TestCipher#test\_crypt: 0.02 s: .  
OpenSSL::TestCipher#test\_dup: 0.00 s: .  
OpenSSL::TestCipher#test\_empty\_data: 0.00 s: .  
OpenSSL::TestCipher#test\_info: 0.00 s: .  
OpenSSL::TestCipher#test\_reset: 0.00 s: .  
OpenSSL::TestDigest#test\_098\_features: 0.00 s: .  
OpenSSL::TestDigest#test\_digest: 0.00 s: .  
OpenSSL::TestDigest#test\_dup: 0.00 s: .  
OpenSSL::TestDigest#test\_eql: 0.00 s: .  
OpenSSL::TestDigest#test\_info: 0.00 s: .  
OpenSSL::TestDigest#test\_reset: 0.00 s: .  
OpenSSL::TestEC#test\_check\_key: 0.03 s: .  
OpenSSL::TestEC#test\_curve\_names: 0.01 s: .  
OpenSSL::TestEC#test\_dh\_compute\_key: 0.03 s: .  
OpenSSL::TestEC#test\_dsa\_sign\_verify: 0.03 s: .  
OpenSSL::TestEC#test\_encoding: 0.07 s: .  
OpenSSL::TestEC#test\_set\_keys: 0.04 s: .  
OpenSSL::TestEOF1#test\_eof\_0: 0.20 s: .  
OpenSSL::TestEOF1#test\_eof\_0\_rw: 0.00 s: .  
OpenSSL::TestEOF1#test\_eof\_1: 0.39 s: .  
OpenSSL::TestEOF1#test\_eof\_2: 0.05 s: .  
OpenSSL::TestEOF1#test\_eof\_3: 0.05 s: .  
OpenSSL::TestEOF2#test\_eof\_0: 0.20 s: .  
OpenSSL::TestEOF2#test\_eof\_0\_rw: 0.00 s: .  
OpenSSL::TestEOF2#test\_eof\_1:  
/home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:37: [BUG]  
Segmentation fault  
ruby 1.9.2dev (2009-10-17 trunk 25381) [i686-linux]

## – control frame ---------- c:0019 p:---- s:0073 b:0073 l:000072 d:000072 CFUNC :=== c:0018 p:0020 s:0069 b:0069 l:000065 d:000068 BLOCK /home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:37 c:0017 p:0026 s:0066 b:0066 l:000065 d:000065 METHOD /home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:35 c:0016 p:0094 s:0063 b:0063 l:000062 d:000062 METHOD /home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:68 c:0015 p:0016 s:0057 b:0055 l:00136c d:000054 BLOCK /home/ruby/openssl/ruby/test/ruby/ut\_eof.rb:66 c:0014 p:0041 s:0052 b:0052 l:000eb0 d:000eb0 METHOD /home/ruby/openssl/ruby/test/openssl/test\_pair.rb:80 c:0013 p:0061 s:0046 b:0046 l:00136c d:00136c METHOD /home/ruby/openssl/ruby/test/ruby/ut\_eof.rb:65 c:0012 p:0063 s:0043 b:0043 l:000042 d:000042 METHOD /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:458 c:0011 p:0091 s:0037 b:0037 l:000018 d:000036 BLOCK /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:426 c:0010 p:---- s:0032 b:0032 l:000031 d:000031 FINISH c:0009 p:---- s:0030 b:0030 l:000029 d:000029 CFUNC :each c:0008 p:0026 s:0027 b:0027 l:000018 d:000026 BLOCK /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:420 c:0007 p:---- s:0024 b:0024 l:000023 d:000023 FINISH c:0006 p:---- s:0022 b:0022 l:000021 d:000021 CFUNC :each c:0005 p:0082 s:0019 b:0019 l:000018 d:000018 METHOD /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:419 c:0004 p:0154 s:0014 b:0014 l:000013 d:000013 METHOD /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:393 c:0003 p:0041 s:0007 b:0007 l:0015dc d:000006 BLOCK /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:334 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH c:0001 p:0000 s:0002 b:0002 l:001034 d:001034 TOP

/home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:334:in `block in autorun' /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:393:in `run’  
/home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:419:in  
`run_test_suites' /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:419:in `each’  
/home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:420:in `block in run_test_suites' /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:420:in `each’  
/home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:426:in `block (2 levels) in run_test_suites' /home/ruby/openssl/lib/ruby/1.9.1/minitest/unit.rb:458:in `run’  
/home/ruby/openssl/ruby/test/ruby/ut\_eof.rb:65:in `test_eof_1' /home/ruby/openssl/ruby/test/openssl/test_pair.rb:80:in `open\_file’  
/home/ruby/openssl/ruby/test/ruby/ut\_eof.rb:66:in `block in test_eof_1' /home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:68:in `read’  
/home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:35:in  
`fill_rbuff' /home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:37:in `rescue in  
fill\_rbuff’  
/home/ruby/openssl/lib/ruby/1.9.1/openssl/buffering.rb:37:in `===’

## – C level backtrace information

./ruby(rb\_vm\_bugreport+0x6c) [0x8152552]  
./ruby [0x8185599]  
./ruby(rb\_bug+0x36) [0x81855f4]  
./ruby [0x80ec2fa]  
[0xb7fd7410]  
./ruby [0x80669f5]  
./ruby [0x806534b]  
./ruby [0x8066ba9]  
./ruby [0x8066bbc]  
./ruby(rb\_gc\_finalize\_deferred+0x19) [0x8066be2]  
./ruby [0x8154aae]  
./ruby(rb\_threadptr\_execute\_interrupts+0x19) [0x8154b91]  
./ruby [0x814b0d6]  
./ruby [0x814ba4c]  
./ruby [0x814b709]  
./ruby(rb\_funcall+0xa2) [0x814bafa]  
./ruby [0x814a724]  
./ruby(rb\_obj\_respond\_to+0x4f) [0x814a631]  
./ruby(rb\_respond\_to+0x20) [0x814a760]  
./ruby [0x8186c58]  
./ruby [0x814807d]  
./ruby [0x8147ef7]  
./ruby [0x8147436]  
./ruby [0x814310a]  
./ruby [0x814fa96]  
./ruby [0x814e7e2]  
./ruby [0x814e870]  
./ruby [0x814bcc6]  
./ruby(rb\_yield+0x3a) [0x814bc9c]  
./ruby(rb\_ary\_each+0x7c) [0x81621ab]  
./ruby [0x814805e]  
./ruby [0x8147ef7]  
./ruby [0x8147436]  
./ruby [0x814310a]  
./ruby [0x814fa96]  
./ruby [0x814e7e2]  
./ruby [0x814e870]  
./ruby [0x814bcc6]  
./ruby(rb\_yield+0x3a) [0x814bc9c]  
./ruby(rb\_ary\_each+0x7c) [0x81621ab]  
./ruby [0x814805e]  
./ruby [0x8147ef7]  
./ruby [0x8147436]  
./ruby [0x814310a]  
./ruby [0x814fa96]  
./ruby [0x814e7e2]  
./ruby(rb\_vm\_invoke\_proc+0xb0) [0x814e922]  
./ruby(rb\_proc\_call+0x8e) [0x8060564]  
./ruby(rb\_call\_end\_proc+0x1a) [0x805dcf6]  
./ruby(rb\_exec\_end\_proc+0x174) [0x805df97]  
./ruby [0x805e1f4]  
./ruby(ruby\_cleanup+0x92) [0x805e2c0]  
./ruby(ruby\_run\_node+0x43) [0x805e620]  
./ruby(main+0x74) [0x805d070]  
/lib/i686/cmov/libc.so.6(\_\_libc\_start\_main+0xe5) [0xb7df7455]  
./ruby [0x805ceb1]

[NOTE]  
You may have encountered a bug in the Ruby interpreter or extension  
libraries.  
Bug reports are welcome.  
For details: [http://www.ruby-lang.org/bugreport.html](http://www.ruby-lang.org/bugreport.html)

zsh: abort ./ruby test/runner.rb -v openssl  
% ldd .ext/i686-linux/openssl.so  
linux-gate.so.1 =\> (0xb7f65000)  
libssl.so.1.0.0 =\> /home/ruby/openssl/lib/libssl.so.1.0.0  
(0xb7ebc000)  
libcrypto.so.1.0.0 =\> /home/ruby/openssl/lib/libcrypto.so.1.0.0  
(0xb7d38000)  
libpthread.so.0 =\> /lib/i686/cmov/libpthread.so.0 (0xb7d04000)  
librt.so.1 =\> /lib/i686/cmov/librt.so.1 (0xb7cfb000)  
libdl.so.2 =\> /lib/i686/cmov/libdl.so.2 (0xb7cf7000)  
libcrypt.so.1 =\> /lib/i686/cmov/libcrypt.so.1 (0xb7cc5000)  
libm.so.6 =\> /lib/i686/cmov/libm.so.6 (0xb7c9f000)  
libc.so.6 =\> /lib/i686/cmov/libc.so.6 (0xb7b44000)  
/lib/ld-linux.so.2 (0xb7f66000)  
% ./ruby -v  
ruby 1.9.2dev (2009-10-17 trunk 25381) [i686-linux]
