aboutsummaryrefslogtreecommitdiffstats
path: root/eval_error.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-12-19 14:10:58 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-12-20 14:12:38 +0900
commit2e7e153a2af1456515d43b6381e38534b069b1c2 (patch)
treea7c1730d6b86170e9e80f2e9705ea824ed517829 /eval_error.c
parent18ba89093a0b214cd89f1567c037c239f094496d (diff)
downloadruby-2e7e153a2af1456515d43b6381e38534b069b1c2.tar.gz
[Bug #19242] Prohibit circular causes to be loaded
Diffstat (limited to 'eval_error.c')
-rw-r--r--eval_error.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/eval_error.c b/eval_error.c
index e02f54e8e6..948a205dd9 100644
--- a/eval_error.c
+++ b/eval_error.c
@@ -291,6 +291,17 @@ show_cause(VALUE errinfo, VALUE str, VALUE opt, VALUE highlight, VALUE reverse,
}
void
+rb_exc_check_circular_cause(VALUE exc)
+{
+ VALUE cause = exc, shown_causes = 0;
+ do {
+ if (shown_cause_p(cause, &shown_causes)) {
+ rb_raise(rb_eArgError, "circular causes");
+ }
+ } while (!NIL_P(cause = rb_attr_get(cause, id_cause)));
+}
+
+void
rb_error_write(VALUE errinfo, VALUE emesg, VALUE errat, VALUE str, VALUE opt, VALUE highlight, VALUE reverse)
{
volatile VALUE eclass;