ruby-changes:7425
From: matz <ko1@a...>
Date: Sat, 30 Aug 2008 15:54:42 +0900 (JST)
Subject: [ruby-changes:7425] Ruby:r18944 (trunk): * ext/openssl/ossl_config.c (Init_ossl_config): memory leak fixed.
matz 2008-08-30 15:54:25 +0900 (Sat, 30 Aug 2008) New Revision: 18944 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18944 Log: * ext/openssl/ossl_config.c (Init_ossl_config): memory leak fixed. a patch <shinichiro.hamaji at gmail.com> in [ruby-dev:35880]. * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto. * ext/strscan/strscan.c (strscan_do_scan): ditto. Modified files: trunk/ChangeLog trunk/ext/openssl/ossl_config.c trunk/ext/openssl/ossl_x509ext.c trunk/ext/strscan/strscan.c Index: ChangeLog =================================================================== --- ChangeLog (revision 18943) +++ ChangeLog (revision 18944) @@ -1,3 +1,12 @@ +Sat Aug 30 15:43:03 2008 Yukihiro Matsumoto <matz@r...> + + * ext/openssl/ossl_config.c (Init_ossl_config): memory leak fixed. + a patch <shinichiro.hamaji at gmail.com> in [ruby-dev:35880]. + + * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto. + + * ext/strscan/strscan.c (strscan_do_scan): ditto. + Sat Aug 30 14:58:32 2008 Nobuyoshi Nakada <nobu@r...> * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): fix for Index: ext/openssl/ossl_config.c =================================================================== --- ext/openssl/ossl_config.c (revision 18943) +++ ext/openssl/ossl_config.c (revision 18944) @@ -443,8 +443,10 @@ eConfigError = rb_define_class_under(mOSSL, "ConfigError", eOSSLError); cConfig = rb_define_class_under(mOSSL, "Config", rb_cObject); + const char *default_config_file = CONF_get1_default_config_file(); rb_define_const(cConfig, "DEFAULT_CONFIG_FILE", - rb_str_new2(CONF_get1_default_config_file())); + rb_str_new2(default_config_file)); + OPENSSL_free(default_config_file); rb_include_module(cConfig, rb_mEnumerable); rb_define_singleton_method(cConfig, "parse", ossl_config_s_parse, 1); rb_define_alias(CLASS_OF(cConfig), "load", "new"); Index: ext/openssl/ossl_x509ext.c =================================================================== --- ext/openssl/ossl_x509ext.c (revision 18943) +++ ext/openssl/ossl_x509ext.c (revision 18944) @@ -333,6 +333,7 @@ ASN1_OCTET_STRING_free(asn1s); ossl_raise(eX509ExtError, NULL); } + free(s); GetX509Ext(self, ext); X509_EXTENSION_set_data(ext, asn1s); Index: ext/strscan/strscan.c =================================================================== --- ext/strscan/strscan.c (revision 18943) +++ ext/strscan/strscan.c (revision 18944) @@ -407,6 +407,7 @@ struct strscanner *p; regex_t *re; int ret; + int tmpreg; Check_Type(regex, T_REGEXP); GET_SCANNER(self, p); @@ -416,6 +417,9 @@ return Qnil; } re = rb_reg_prepare_re(regex, p->str); + tmpreg = re != RREGEXP(regex)->ptr; + if (!tmpreg) RREGEXP(regex)->usecnt++; + if (headonly) { ret = onig_match(re, (UChar* )CURPTR(p), (UChar* )(CURPTR(p) + S_RESTLEN(p)), @@ -427,6 +431,16 @@ (UChar* )CURPTR(p), (UChar* )(CURPTR(p) + S_RESTLEN(p)), &(p->regs), ONIG_OPTION_NONE); } + if (!tmpreg) RREGEXP(re)->usecnt--; + if (tmpreg) { + if (RREGEXP(regex)->usecnt) { + onig_free(re); + } + else { + onig_free(RREGEXP(regex)->ptr); + RREGEXP(regex)->ptr = re; + } + } if (ret == -2) rb_raise(ScanError, "regexp buffer overflow"); if (ret < 0) { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/