Index: b/regparse.c
===================================================================
--- a/regparse.c	(revision 57908)
+++ b/regparse.c	(revision 57909)
@@ -4570,11 +4570,11 @@ parse_char_class(Node** np, Node** asc_n https://github.com/ruby/ruby/blob/trunk/ruby_2_4/regparse.c#L4570
   enum CCVALTYPE val_type, in_type;
   int val_israw, in_israw;
 
+  *np = *asc_np = NULL_NODE;
   env->parse_depth++;
   if (env->parse_depth > ParseDepthLimit)
     return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
   prev_cc = asc_prev_cc = (CClassNode* )NULL;
-  *np = *asc_np = NULL_NODE;
   r = fetch_token_in_cc(tok, src, end, env);
   if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {
     neg = 1;
Index: b/ext/-test-/regexp/init.c
===================================================================
--- a/ext/-test-/regexp/init.c	(revision 0)
+++ b/ext/-test-/regexp/init.c	(revision 57909)
@@ -0,0 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/ext/-test-/regexp/init.c#L1
+#include "ruby.h"
+
+#define init(n) {void Init_##n(VALUE klass); Init_##n(klass);}
+
+void
+Init_regexp(void)
+{
+    VALUE mBug = rb_define_module("Bug");
+    VALUE klass = rb_define_class_under(mBug, "Regexp", rb_cRegexp);
+    TEST_INIT_FUNCS(init);
+}

Property changes on: ruby_2_4/ext/-test-/regexp/init.c
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: b/ext/-test-/regexp/extconf.rb
===================================================================
--- a/ext/-test-/regexp/extconf.rb	(revision 0)
+++ b/ext/-test-/regexp/extconf.rb	(revision 57909)
@@ -0,0 +1,3 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/ext/-test-/regexp/extconf.rb#L1
+# frozen_string_literal: false
+require_relative "../auto_ext.rb"
+auto_ext

Property changes on: ruby_2_4/ext/-test-/regexp/extconf.rb
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: b/ext/-test-/regexp/parse_depth_limit.c
===================================================================
--- a/ext/-test-/regexp/parse_depth_limit.c	(revision 0)
+++ b/ext/-test-/regexp/parse_depth_limit.c	(revision 57909)
@@ -0,0 +1,23 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/ext/-test-/regexp/parse_depth_limit.c#L1
+#include <ruby.h>
+#include <ruby/onigmo.h>
+
+static VALUE
+get_parse_depth_limit(VALUE self)
+{
+    unsigned int depth = onig_get_parse_depth_limit();
+    return UINT2NUM(depth);
+}
+
+static VALUE
+set_parse_depth_limit(VALUE self, VALUE depth)
+{
+    onig_set_parse_depth_limit(NUM2UINT(depth));
+    return depth;
+}
+
+void
+Init_parse_depth_limit(VALUE klass)
+{
+    rb_define_singleton_method(klass, "parse_depth_limit", get_parse_depth_limit, 0);
+    rb_define_singleton_method(klass, "parse_depth_limit=", set_parse_depth_limit, 1);
+}

Property changes on: ruby_2_4/ext/-test-/regexp/parse_depth_limit.c
___________________________________________________________________
Added: svn:eol-style
   + LF

Index: b/test/ruby/test_regexp.rb
===================================================================
--- a/test/ruby/test_regexp.rb	(revision 57908)
+++ b/test/ruby/test_regexp.rb	(revision 57909)
@@ -1198,6 +1198,25 @@ class TestRegexp < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/ruby/test_regexp.rb#L1198
     RUBY
   end
 
+  def test_invalid_free_at_parse_depth_limit_over
+    assert_separately([], "#{<<-"begin;"}\n#{<<-"end;"}")
+    begin;
+      begin
+        require '-test-/regexp'
+      rescue LoadError
+      else
+        bug = '[ruby-core:79624] [Bug #13234]'
+        Bug::Regexp.parse_depth_limit = 10
+        src = "[" * 100
+        3.times do
+          assert_raise_with_message(RegexpError, /parse depth limit over/, bug) do
+            Regexp.new(src)
+          end
+        end
+      end
+    end;
+  end
+
   # This assertion is for porting x2() tests in testpy.py of Onigmo.
   def assert_match_at(re, str, positions, msg = nil)
     re = Regexp.new(re) unless re.is_a?(Regexp)