From e23ae96beecf5612bbcc0da580415498c896416a Mon Sep 17 00:00:00 2001 From: Shixin Zeng Date: Wed, 27 Aug 2014 12:11:47 -0400 Subject: [PATCH] Check type of argument before call comparator in sort This fixes CC#1516 >> sort/compare [1 2 #[unset!]] :> ; The R3 process crashes at this point without a system exception --- src/core/t-block.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core/t-block.c b/src/core/t-block.c index 8e5664417d..019b3d1831 100644 --- a/src/core/t-block.c +++ b/src/core/t-block.c @@ -387,6 +387,15 @@ static struct { ***********************************************************************/ { REBVAL *val; + + REBVAL *args = BLK_SKIP(VAL_FUNC_ARGS(sort_flags.compare), 1); + if (NOT_END(args) && !TYPE_CHECK(args, VAL_TYPE((REBVAL*)v1))){ + Trap3(RE_EXPECT_ARG, Of_Type(sort_flags.compare), args, Of_Type((REBVAL*)v1)); + } + ++ args; + if (NOT_END(args) && !TYPE_CHECK(args, VAL_TYPE((REBVAL*)v2))) { + Trap3(RE_EXPECT_ARG, Of_Type(sort_flags.compare), args, Of_Type((REBVAL*)v2)); + } if (sort_flags.reverse) val = Apply_Func(0, sort_flags.compare, v1, v2, 0);