summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--pack.c9
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 <nobu@ruby-lang.org>
+
+ * pack.c (pack_pack): check argument overrun for 'P'. based on a
+ patch by rucila <rucila at yahoo.cojp>. fixed: [ruby-dev:29182]
+
Tue Aug 01 17:44:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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);