summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-19 05:18:49 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-19 05:18:49 +0000
commita5d754acb8cfd6d3ac9f26b17ef27ca588420e38 (patch)
tree13c80b17bca8aabad50a3677b05ecdaebb1be2c1
parent6b6368158dd2556007c036e4f01bf45fec2039f0 (diff)
* iseq.c (proc_dup): don't duplicate sym_procs. [Fix GH-1479]
[ruby-core:78100] [Bug #12927] Based on the patch provided by Emiliano Ritiro. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@56841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--proc.c6
-rw-r--r--version.h2
3 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 8c7bd61164..4690f79c0e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Nov 19 14:06:07 2016 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+
+ * iseq.c (proc_dup): don't duplicate sym_procs. [Fix GH-1479]
+ [ruby-core:78100] [Bug #12927]
+ Based on the patch provided by Emiliano Ritiro.
+
Sat Nov 19 11:48:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* iseq.c (iseqw_s_compile_file): deal with syntax error as well as
diff --git a/proc.c b/proc.c
index 9df55c45c4..755b03ea30 100644
--- a/proc.c
+++ b/proc.c
@@ -65,11 +65,13 @@ typedef struct {
VALUE env[3]; /* me, specval, envval */
} cfunc_proc_t;
+#define IS_SYM_PROC(proc) (proc->block.ep == ((const cfunc_proc_t *)proc)->env+1)
+
static size_t
proc_memsize(const void *ptr)
{
const rb_proc_t *proc = ptr;
- if (proc->block.ep == ((const cfunc_proc_t *)ptr)->env+1)
+ if (IS_SYM_PROC(proc))
return sizeof(cfunc_proc_t);
return sizeof(rb_proc_t);
}
@@ -111,6 +113,8 @@ proc_dup(VALUE self)
rb_proc_t *dst;
GetProcPtr(self, src);
+ if (IS_SYM_PROC(src))
+ return self;
procval = rb_proc_alloc(rb_cProc);
GetProcPtr(procval, dst);
*dst = *src;
diff --git a/version.h b/version.h
index d7af154d2a..cbf5191573 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.3.3"
#define RUBY_RELEASE_DATE "2016-11-19"
-#define RUBY_PATCHLEVEL 220
+#define RUBY_PATCHLEVEL 221
#define RUBY_RELEASE_YEAR 2016
#define RUBY_RELEASE_MONTH 11