Skip to content

Commit 74a1b61

Browse files
committed
Fix #295: List accessing invalid memory
1 parent b470af6 commit 74a1b61

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/kx.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -790,11 +790,12 @@ Z K ex2(V*v, K k) //execute words --- all returns must be Ks. v: word list, k:
790790

791791
if(bk(v[1])) {
792792
K z= ex_(*v,1);
793-
if(prnt && kV(prnt)[PARAMS] && !kK(prnt)[PARAMS]->n && kV(z)[LOCALS] && !kK(z)[LOCALS]->n) {
794-
kV(z)[CACHE_TREE]=kclone(kK(prnt)[CACHE_TREE]); prnt=z; }
795-
else if(prnt && kV(prnt)[LOCALS] && kK(prnt)[LOCALS]->n && kV(z)[PARAMS] && kK(z)[PARAMS]->n) {
796-
K j0=dot_monadic(kV(z)[PARAMS]); K j1=dot_monadic(kV(prnt)[CACHE_TREE]);
797-
K j2=join(j0,j1); kV(z)[CACHE_TREE]=dot_monadic(j2); cd(j0); cd(j1); cd(j2); }
793+
if(prnt && z->t==7) {
794+
if(kV(prnt)[PARAMS] && !kK(prnt)[PARAMS]->n && kV(z)[LOCALS] && !kK(z)[LOCALS]->n) {
795+
kV(z)[CACHE_TREE]=kclone(kK(prnt)[CACHE_TREE]); prnt=z; }
796+
else if(kV(prnt)[LOCALS] && kK(prnt)[LOCALS]->n && kV(z)[PARAMS] && kK(z)[PARAMS]->n) {
797+
K j0=dot_monadic(kV(z)[PARAMS]); K j1=dot_monadic(kV(prnt)[CACHE_TREE]);
798+
K j2=join(j0,j1); kV(z)[CACHE_TREE]=dot_monadic(j2); cd(j0); cd(j1); cd(j2); } }
798799
R z; }
799800

800801
if(!VA(*v) && (offsetColon == v[1] || (VA(v[1]) && offsetColon==v[2]) ) ) //Handle assignment

0 commit comments

Comments
 (0)