diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-17 04:05:18 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-17 04:05:18 +0000 |
commit | 9c1e33fc452bfc545eac51a8579d4f3a7f7872b8 (patch) | |
tree | 9e2ab81ebca1f2e67f340aa0d11fa27f885a56cf /dir.c | |
parent | 46a9555860f4dba985ed9839b8f249376bf0bed4 (diff) | |
download | ruby-9c1e33fc452bfc545eac51a8579d4f3a7f7872b8.tar.gz |
* dir.c (rb_push_glob): fix overrun. [ruby-dev:24886]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -1500,9 +1500,14 @@ rb_push_glob(str, flags) /* '\0' is delimiter */ while (offset < RSTRING(str)->len) { int status = push_glob(ary, str, offset, flags); + char *p, *pend; if (status) rb_jump_tag(status); - offset += strlen(RSTRING(str)->ptr+offset) + 1; - while (!RSTRING(str)->ptr[offset]) offset++; + p = RSTRING(str)->ptr + offset; + p += strlen(p) + 1; + pend = RSTRING(str)->ptr + RSTRING(str)->len; + while (p < pend && !*p) + p++; + offset = p - RSTRING(str)->ptr; } if (rb_block_given_p()) { |