[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]