summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/objspace/objspace_dump.c3
-rw-r--r--test/objspace/test_objspace.rb11
3 files changed, 20 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 5648d20d33..c6108ab4d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Mar 11 06:54:00 2014 Scott Francis <scott.francis@shopify.com>
+
+ * ext/objspace/objspace_dump.c: Check fptr before trying to dump RFILE
+ object fd. [GH-562]
+
+ * test/objspace/test_objspace.rb: add test
+
Tue Mar 11 02:04:36 2014 NARUSE, Yui <naruse@ruby-lang.org>
* vm_dump.c (rb_vm_bugreport): show vm maps on FreeBSD.
diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c
index 6b3bf44489..076d4fbaa1 100644
--- a/ext/objspace/objspace_dump.c
+++ b/ext/objspace/objspace_dump.c
@@ -230,7 +230,8 @@ dump_object(VALUE obj, struct dump_config *dc)
case T_FILE:
fptr = RFILE(obj)->fptr;
- dump_append(dc, ", \"fd\":%d", fptr->fd);
+ if (fptr)
+ dump_append(dc, ", \"fd\":%d", fptr->fd);
break;
case T_ZOMBIE:
diff --git a/test/objspace/test_objspace.rb b/test/objspace/test_objspace.rb
index 42dc55de9f..ea89a87e18 100644
--- a/test/objspace/test_objspace.rb
+++ b/test/objspace/test_objspace.rb
@@ -266,4 +266,15 @@ class TestObjSpace < Test::Unit::TestCase
File.unlink(output)
end
end
+
+ def test_dump_uninitialized_file
+ assert_in_out_err(%[-robjspace], <<-RUBY) do |output, error|
+ puts ObjectSpace.dump(File.allocate)
+ RUBY
+ assert_equal [], error
+ json = JSON.load(output.join)
+ assert_equal "FILE", json["type"]
+ assert_nil json["fd"]
+ end
+ end
end