From 24ed86fcc71f821cedc3311bfa08b7ccf42b9d5f Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Thu, 13 Jun 2019 12:41:49 -0700 Subject: [PATCH] Do not allow modifications to ENV if ENV if frozen None of the ENV specific methods checked whether ENV was frozen. This adds the appropriate checks to any potentionally mutating method. Fixes [Bug #15920] --- hash.c | 12 +++++++++++- test/ruby/test_env.rb | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/hash.c b/hash.c index 2982afad9d..ecf8dbbd29 100644 --- a/hash.c +++ b/hash.c @@ -4626,6 +4626,7 @@ env_delete_m(VALUE obj, VALUE name) { VALUE val; + rb_check_frozen(obj); val = env_delete(name); if (NIL_P(val) && rb_block_given_p()) rb_yield(name); return val; @@ -4959,6 +4960,7 @@ ruby_unsetenv(const char *name) static VALUE env_aset_m(VALUE obj, VALUE nm, VALUE val) { + rb_check_frozen(obj); return env_aset(nm, val); } @@ -5170,6 +5172,7 @@ env_reject_bang(VALUE ehash) int del = 0; RETURN_SIZED_ENUMERATOR(ehash, 0, 0, rb_env_size); + rb_check_frozen(ehash); keys = env_keys(); RBASIC_CLEAR_CLASS(keys); for (i=0; i