summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-io
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-04-18 17:27:41 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-04-18 17:27:41 +0900
commitc9275bbbed36478283f3b0d1737b4ba5583d3023 (patch)
tree0d70b4d60956d612b55efaedbd3de90ade322fb7 /mrbgems/mruby-io
parent05db341ef5454ba5bbf613f7f84890fd16c9d532 (diff)
downloadmruby-c9275bbbed36478283f3b0d1737b4ba5583d3023.tar.gz
mruby-c9275bbbed36478283f3b0d1737b4ba5583d3023.zip
`mrb_io_initialize_copy` should not free existing `fptr`; fix #4005
When arguments `copy` and `orig` are the same object.
Diffstat (limited to 'mrbgems/mruby-io')
-rw-r--r--mrbgems/mruby-io/src/io.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c
index e11aa3300..bc17dd9dd 100644
--- a/mrbgems/mruby-io/src/io.c
+++ b/mrbgems/mruby-io/src/io.c
@@ -563,6 +563,7 @@ mrb_io_initialize_copy(mrb_state *mrb, mrb_value copy)
mrb_get_args(mrb, "o", &orig);
fptr_orig = io_get_open_fptr(mrb, orig);
fptr_copy = (struct mrb_io *)DATA_PTR(copy);
+ if (fptr_orig == fptr_copy) return copy;
if (fptr_copy != NULL) {
fptr_finalize(mrb, fptr_copy, FALSE);
mrb_free(mrb, fptr_copy);