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

ruby-changes:18619

From: kosaki <ko1@a...>
Date: Mon, 24 Jan 2011 21:30:07 +0900 (JST)
Subject: [ruby-changes:18619] Ruby:r30643 (trunk): * object.c (rb_str_to_dbl): use ALLOC_N instead ALLOCA_N because

kosaki	2011-01-24 21:30:02 +0900 (Mon, 24 Jan 2011)

  New Revision: 30643

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30643

  Log:
    * object.c (rb_str_to_dbl): use ALLOC_N instead ALLOCA_N because
      ALLOC_N may cause stack overflow.

  Modified files:
    trunk/ChangeLog
    trunk/object.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30642)
+++ ChangeLog	(revision 30643)
@@ -1,3 +1,8 @@
+Mon Jan 24 21:28:34 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
+
+	* object.c (rb_str_to_dbl): use ALLOC_N instead ALLOCA_N because
+	  ALLOC_N may cause stack overflow.
+
 Mon Jan 24 21:04:45 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* error.c (rb_invalid_str): prevent intermediate variable from GC.
Index: object.c
===================================================================
--- object.c	(revision 30642)
+++ object.c	(revision 30643)
@@ -2245,6 +2245,8 @@
 {
     char *s;
     long len;
+    double ret;
+    char *alloced = NULL;
 
     StringValue(str);
     s = RSTRING_PTR(str);
@@ -2254,14 +2256,16 @@
 	    rb_raise(rb_eArgError, "string for Float contains null byte");
 	}
 	if (s[len]) {		/* no sentinel somehow */
-	    char *p = ALLOCA_N(char, len+1);
-
+	    char *p = alloced = ALLOC_N(char, len+1);
 	    MEMCPY(p, s, char, len);
 	    p[len] = '\0';
 	    s = p;
 	}
     }
-    return rb_cstr_to_dbl(s, badcheck);
+    ret = rb_cstr_to_dbl(s, badcheck);
+    if (alloced)
+	xfree(alloced);
+    return ret;
 }
 
 VALUE

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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