From a9299da438d46958603801ed48d6fe1f637b69ee Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 16 Apr 2016 06:01:04 -0700 Subject: Block absconds across foreign frames. * unwind.c (uw_block_abscond): If a UW_GUARD frame occurs in the search for the abscond point, throw an error. --- unwind.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/unwind.c b/unwind.c index 900d614e..a521c732 100644 --- a/unwind.c +++ b/unwind.c @@ -435,6 +435,10 @@ val uw_block_abscond(val tag, val result) for (ex = uw_stack; ex != 0; ex = ex->uw.up) { if (ex->uw.type == UW_BLOCK && ex->bl.tag == tag) break; + if (ex->uw.type == UW_GUARD) + uw_throwf(error_s, lit("~a: cannot abscond via foreign stack frames\n"), + prog_string, nao); + } if (ex == 0) -- cgit v1.2.3