about summary refs log tree commit homepage
path: root/ext/posix_mq/posix_mq.c
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-03-20 18:47:26 +0000
committerEric Wong <e@80x24.org>2017-03-20 19:13:09 +0000
commitf70f5101ac040d7da3ec67c3a7c1664bb9d5193c (patch)
tree21e91d76e3d141e30fdc98739e58085c8bda2842 /ext/posix_mq/posix_mq.c
parentc374ed19128f87a52f024bd7a8e56e13f7423603 (diff)
downloadruby_posix_mq-f70f5101ac040d7da3ec67c3a7c1664bb9d5193c.tar.gz
We do not want ObjectSpace walkers to be able to mess with
our internals.
Diffstat (limited to 'ext/posix_mq/posix_mq.c')
-rw-r--r--ext/posix_mq/posix_mq.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ext/posix_mq/posix_mq.c b/ext/posix_mq/posix_mq.c
index 83e9e58..4ba7d7c 100644
--- a/ext/posix_mq/posix_mq.c
+++ b/ext/posix_mq/posix_mq.c
@@ -523,7 +523,7 @@ static VALUE init(int argc, VALUE *argv, VALUE self)
                         rb_sys_fail("mq_open");
         }
 
-        mq->name = rb_str_dup(name);
+        mq->name = rb_str_new_frozen(name);
         if (x.oflags & O_NONBLOCK)
                 mq->attr.mq_flags = O_NONBLOCK;
 
@@ -887,6 +887,7 @@ static VALUE name(VALUE self)
                 rb_raise(rb_eArgError, "can not get name of an adopted socket");
         }
 
+        /* XXX compatibility: in retrospect, we could return a frozen string */
         return rb_str_dup(mq->name);
 }
 
@@ -907,6 +908,7 @@ static int lookup_sig(VALUE sig)
                 VALUE mSignal = rb_const_get(rb_cObject, rb_intern("Signal"));
 
                 list = rb_funcall(mSignal, rb_intern("list"), 0, 0);
+                rb_obj_freeze(list);
                 rb_global_variable(&list);
         }