mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* pack.c (pack_unpack): propagate association array to copied
string. [ruby-core:08223] * pack.c (pack_unpack): return referenced string itself if it has same length as specified. a patch from <nobu at ruby-lang.org> in [ruby-core:08225]. * pack.c (pack_pack): taint 'p' packed strings. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
226bf50f8e
commit
a15fda8267
2 changed files with 19 additions and 5 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
Tue Jul 18 15:49:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* pack.c (pack_unpack): propagate association array to copied
|
||||
string. [ruby-core:08223]
|
||||
|
||||
* pack.c (pack_unpack): return referenced string itself if it has
|
||||
same length as specified. a patch from <nobu at ruby-lang.org>
|
||||
in [ruby-core:08225].
|
||||
|
||||
* pack.c (pack_pack): taint 'p' packed strings.
|
||||
|
||||
Tue Jul 18 14:38:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* process.c (rb_f_system): call rb_sys_fail(0) if rb_last_status
|
||||
|
|
13
pack.c
13
pack.c
|
@ -938,6 +938,7 @@ pack_pack(ary, fmt)
|
|||
associates = rb_ary_new();
|
||||
}
|
||||
rb_ary_push(associates, from);
|
||||
rb_obj_taint(from);
|
||||
rb_str_buf_cat(res, (char*)&t, sizeof(char*));
|
||||
}
|
||||
break;
|
||||
|
@ -1890,8 +1891,12 @@ pack_unpack(str, fmt)
|
|||
pend = p + RARRAY(a)->len;
|
||||
while (p < pend) {
|
||||
if (TYPE(*p) == T_STRING && RSTRING(*p)->ptr == t) {
|
||||
if (len > RSTRING(*p)->len) {
|
||||
len = RSTRING(*p)->len;
|
||||
if (len < RSTRING(*p)->len) {
|
||||
tmp = rb_tainted_str_new(t, len);
|
||||
rb_str_associate(tmp, a);
|
||||
}
|
||||
else {
|
||||
tmp = *p;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1900,7 +1905,6 @@ pack_unpack(str, fmt)
|
|||
if (p == pend) {
|
||||
rb_raise(rb_eArgError, "non associated pointer");
|
||||
}
|
||||
tmp = rb_tainted_str_new(t, len);
|
||||
}
|
||||
else {
|
||||
tmp = Qnil;
|
||||
|
@ -1932,6 +1936,7 @@ pack_unpack(str, fmt)
|
|||
pend = p + RARRAY(a)->len;
|
||||
while (p < pend) {
|
||||
if (TYPE(*p) == T_STRING && RSTRING(*p)->ptr == t) {
|
||||
tmp = *p;
|
||||
break;
|
||||
}
|
||||
p++;
|
||||
|
@ -1939,8 +1944,6 @@ pack_unpack(str, fmt)
|
|||
if (p == pend) {
|
||||
rb_raise(rb_eArgError, "non associated pointer");
|
||||
}
|
||||
tmp = rb_str_new2(t);
|
||||
OBJ_INFECT(tmp, str);
|
||||
}
|
||||
else {
|
||||
tmp = Qnil;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue