mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
file.c: fix buffer overflow
* file.c (rb_readlink): fix buffer overflow on a long symlink. since rb_str_modify_expand() expands from its length but not its capacity, need to set the length properly for each expansion. [ruby-core:58592] [Bug #9157] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43853 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
adcd0174b9
commit
079009fb93
3 changed files with 26 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Tue Nov 26 16:30:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* file.c (rb_readlink): fix buffer overflow on a long symlink. since
|
||||||
|
rb_str_modify_expand() expands from its length but not its capacity,
|
||||||
|
need to set the length properly for each expansion.
|
||||||
|
[ruby-core:58592] [Bug #9157]
|
||||||
|
|
||||||
Tue Nov 26 14:23:17 2013 Aman Gupta <ruby@tmm1.net>
|
Tue Nov 26 14:23:17 2013 Aman Gupta <ruby@tmm1.net>
|
||||||
|
|
||||||
* ext/objspace/objspace_dump.c (dump_append_string_value): Escape
|
* ext/objspace/objspace_dump.c (dump_append_string_value): Escape
|
||||||
|
|
1
file.c
1
file.c
|
@ -2618,6 +2618,7 @@ rb_readlink(VALUE path)
|
||||||
) {
|
) {
|
||||||
rb_str_modify_expand(v, size);
|
rb_str_modify_expand(v, size);
|
||||||
size *= 2;
|
size *= 2;
|
||||||
|
rb_str_set_len(v, size);
|
||||||
}
|
}
|
||||||
if (rv < 0) {
|
if (rv < 0) {
|
||||||
rb_str_resize(v, 0);
|
rb_str_resize(v, 0);
|
||||||
|
|
|
@ -391,6 +391,24 @@ class TestFileExhaustive < Test::Unit::TestCase
|
||||||
rescue NotImplementedError
|
rescue NotImplementedError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_readlink_long_path
|
||||||
|
return unless @symlinkfile
|
||||||
|
bug9157 = '[ruby-core:58592] [Bug #9157]'
|
||||||
|
assert_separately(["-", @symlinkfile, bug9157], <<-"end;")
|
||||||
|
symlinkfile, bug9157 = *ARGV
|
||||||
|
100.step(1000, 100) do |n|
|
||||||
|
File.unlink(symlinkfile)
|
||||||
|
link = "foo"*n
|
||||||
|
begin
|
||||||
|
File.symlink(link, symlinkfile)
|
||||||
|
rescue Errno::ENAMETOOLONG
|
||||||
|
break
|
||||||
|
end
|
||||||
|
assert_equal(link, File.readlink(symlinkfile), bug9157)
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
|
||||||
def test_unlink
|
def test_unlink
|
||||||
assert_equal(1, File.unlink(@file))
|
assert_equal(1, File.unlink(@file))
|
||||||
make_file("foo", @file)
|
make_file("foo", @file)
|
||||||
|
|
Loading…
Add table
Reference in a new issue