summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-pack
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-08-14 14:58:09 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-08-14 14:58:09 +0900
commit8e5e96239c4e4b4725dbff14ce9f1019e3058de8 (patch)
tree5b5b10ca73f77e2526e501bfc5595b8eabdd7950 /mrbgems/mruby-pack
parentad194bd46bd51aa5bfd5863f3ce18dee8a347c29 (diff)
downloadmruby-8e5e96239c4e4b4725dbff14ce9f1019e3058de8.tar.gz
mruby-8e5e96239c4e4b4725dbff14ce9f1019e3058de8.zip
pack.c: fixed a overwriting bug in `pack_w` and `pack_M`.
Diffstat (limited to 'mrbgems/mruby-pack')
-rw-r--r--mrbgems/mruby-pack/src/pack.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c
index d953ce898..e191c1d58 100644
--- a/mrbgems/mruby-pack/src/pack.c
+++ b/mrbgems/mruby-pack/src/pack.c
@@ -398,7 +398,7 @@ pack_w(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
if ((n & mask) == 0) break;
}
str = str_len_ensure(mrb, str, sidx + i);
- p = RSTRING_PTR(str);
+ p = RSTRING_PTR(str)+sidx;
for (size_t j=i; j>0; p++,j--) {
mrb_int x = (n>>(7*(j-1)))&0x7f;
*p = (char)x;
@@ -997,8 +997,8 @@ pack_M(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, int count)
prev = '\n';
}
if (i > 1024 - 5) {
- str_len_ensure(mrb, dst, didx+i);
- memcpy(RSTRING_PTR(dst), buff, i);
+ str_len_ensure(mrb, dst, didx+dlen+i);
+ memcpy(RSTRING_PTR(dst)+didx+dlen, buff, i);
dlen += i;
i = 0;
}
@@ -1009,8 +1009,8 @@ pack_M(mrb_state *mrb, mrb_value src, mrb_value dst, mrb_int didx, int count)
buff[i++] = '\n';
}
if (i > 0) {
- str_len_ensure(mrb, dst, didx+i);
- memcpy(RSTRING_PTR(dst), buff, i);
+ str_len_ensure(mrb, dst, didx+dlen+i);
+ memcpy(RSTRING_PTR(dst)+didx+dlen, buff, i);
dlen += i;
}
return dlen;