From fc4907f25d5b6a6f89e778ec81b400e6f1661556 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 4 Aug 2006 04:58:25 +0000 Subject: * pack.c (pack_pack): check argument overrun for 'P'. based on a patch by rucila . fixed: [ruby-dev:29182] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10660 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ pack.c | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 11ec374e3d..2c9513d662 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Aug 4 13:56:51 2006 Nobuyoshi Nakada + + * pack.c (pack_pack): check argument overrun for 'P'. based on a + patch by rucila . fixed: [ruby-dev:29182] + Tue Aug 01 17:44:03 2006 Nobuyoshi Nakada * win32/win32.c (init_stdhandle): assign standard file handles. diff --git a/pack.c b/pack.c index 4bfb95f8be..d58792f825 100644 --- a/pack.c +++ b/pack.c @@ -364,7 +364,7 @@ num2i32(x) #else # define QUAD_SIZE 8 #endif -static char *toofew = "too few arguments"; +static const char toofew[] = "too few arguments"; static void encodes _((VALUE,char*,long,int)); static void qpencode _((VALUE,VALUE,long)); @@ -460,8 +460,9 @@ pack_pack(ary, fmt) items = RARRAY(ary)->len; idx = 0; -#define THISFROM RARRAY(ary)->ptr[idx] -#define NEXTFROM (items-- > 0 ? RARRAY(ary)->ptr[idx++] : (rb_raise(rb_eArgError, toofew),0)) +#define TOO_FEW (rb_raise(rb_eArgError, toofew), 0) +#define THISFROM (items > 0 ? RARRAY(ary)->ptr[idx] : TOO_FEW) +#define NEXTFROM (items-- > 0 ? RARRAY(ary)->ptr[idx++] : TOO_FEW) while (p < pend) { if (RSTRING(fmt)->ptr + RSTRING(fmt)->len != pend) { @@ -494,7 +495,7 @@ pack_pack(ary, fmt) } if (*p == '*') { /* set data length */ len = strchr("@Xxu", type) ? 0 : items; - p++; + p++; } else if (ISDIGIT(*p)) { len = strtoul(p, (char**)&p, 10); -- cgit v1.2.3