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/