From 70a33140586b1f6826736b5ba02f794737ea0580 Mon Sep 17 00:00:00 2001 From: Oldes Date: Sun, 9 Feb 2020 15:17:04 +0100 Subject: [PATCH] FIX: Overprotective PROTECT for path access to maps fixes: https://github.com/rebol/rebol-issues/issues/1872 --- src/core/t-map.c | 3 ++- src/tests/units/map-test.r3 | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/t-map.c b/src/core/t-map.c index ea981c3a0b..a173031560 100644 --- a/src/core/t-map.c +++ b/src/core/t-map.c @@ -291,6 +291,8 @@ REBVAL *val = 0; REBINT n = 0; + if (pvs->setval) TRAP_PROTECT(VAL_SERIES(data)); + if (IS_END(pvs->path+1)) val = pvs->setval; if (IS_NONE(pvs->select)) return PE_NONE; @@ -302,7 +304,6 @@ if (!n) return PE_NONE; - TRAP_PROTECT(VAL_SERIES(data)); pvs->value = VAL_BLK_SKIP(data, ((n-1)*2)+1); return PE_OK; } diff --git a/src/tests/units/map-test.r3 b/src/tests/units/map-test.r3 index e4b237834d..77770662a6 100644 --- a/src/tests/units/map-test.r3 +++ b/src/tests/units/map-test.r3 @@ -20,6 +20,15 @@ Rebol [ --test-- "map-issue-598" --assert error? try [make map! [[a] 1]] + ;@@ https://github.com/rebol/rebol-issues/issues/1872 + --test-- "map-issue-1872" + m: map [a: 42] + protect m + --assert error? err: try [m/a: 0] + --assert err/id = 'protected + --assert 42 = try [m/a] + unprotect m + ===end-group=== ===start-group=== "reflection"