From 26a8d8eaff66e06b639b6117dbb70ba4949c8de4 Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Fri, 11 Aug 2006 16:28:58 +0200 Subject: [PATCH] Freeze the key-value pair arrays in Ogg::Vorbis::Comments. This protects them from being modified, which should never be necessary. --- ext/comments.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ext/comments.c b/ext/comments.c index 2396728..bc7d844 100644 --- a/ext/comments.c +++ b/ext/comments.c @@ -48,7 +48,7 @@ comments_init (VALUE self, vcedit_state *state) o->items = rb_ary_new2 (vc->comments); for (i = 0; i < vc->comments; i++) { - VALUE k, v; + VALUE k, v, pair; char *ptr, *content = vc->user_comments[i]; ptr = strchr (content, '='); @@ -59,8 +59,10 @@ comments_init (VALUE self, vcedit_state *state) v = rb_str_new2 (ptr + 1); - rb_ary_store (o->items, i, - rb_ary_new3 (2, k, v)); + pair = rb_ary_new3 (2, k, v); + OBJ_FREEZE (pair); + + rb_ary_store (o->items, i, pair); } rb_iv_set (self, "@items", o->items); @@ -333,6 +335,7 @@ c_aref (VALUE self, VALUE key) static VALUE c_aset (VALUE self, VALUE key, VALUE value) { + VALUE tmp; RbVorbisComments *o; struct RArray *items; int i; @@ -352,7 +355,10 @@ c_aset (VALUE self, VALUE key, VALUE value) } } - rb_ary_push (o->items, rb_ary_new3 (2, key, value)); + tmp = rb_ary_new3 (2, key, value); + OBJ_FREEZE (tmp); + + rb_ary_push (o->items, tmp); return value; } -- 2.30.2