From 18ff3016e66f3c324ea324580514a889061296f2 Mon Sep 17 00:00:00 2001 From: otya128 Date: Thu, 15 Dec 2016 00:24:29 +0900 Subject: [PATCH] Fix array range check --- SMILEBASIC/type.d | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SMILEBASIC/type.d b/SMILEBASIC/type.d index d1bbfa5..92d4cab 100644 --- a/SMILEBASIC/type.d +++ b/SMILEBASIC/type.d @@ -340,19 +340,19 @@ class Array(T) ref T opIndex(int i1, int i2) { if(dimCount != 2) throw new SyntaxError(); - if(i1 >= dim[0] && i2 >= dim[1]) throw new SubscriptOutOfRange(); + if(i1 >= dim[1] || i2 >= dim[0]) throw new SubscriptOutOfRange(); return array[i1 * dim[0] + i2]; } ref T opIndex(int i1, int i2, int i3) { if(dimCount != 3) throw new SyntaxError(); - if(i1 >= dim[0] && i2 >= dim[1] && i3 >= dim[2]) throw new SubscriptOutOfRange(); + if(i1 >= dim[2] || i2 >= dim[1] || i3 >= dim[0]) throw new SubscriptOutOfRange(); return array[i1 * dim[0] * dim[1] + i2 * dim[0] + i3]; } ref T opIndex(int i1, int i2, int i3, int i4) { if(dimCount != 4) throw new SyntaxError(); - if(i1 >= dim[0] && i2 >= dim[1] && i3 >= dim[2] && i4 >= dim[3]) throw new SubscriptOutOfRange(); + if(i1 >= dim[3] || i2 >= dim[2] || i3 >= dim[1] || i4 >= dim[0]) throw new SubscriptOutOfRange(); return array[i1];//array[i1 * dim[0] * dim[1] * dim[2] + i2 * dim[1] + i3]; } T opIndexAssign(T v, int i1) @@ -364,19 +364,19 @@ class Array(T) T opIndexAssign(T v, int i1, int i2) { if(dimCount != 2) throw new SyntaxError(); - if(i1 >= dim[0] && i2 >= dim[1]) throw new SubscriptOutOfRange(); + if(i1 >= dim[1] || i2 >= dim[0]) throw new SubscriptOutOfRange(); return array[i1 * dim[0] + i2] = v; } T opIndexAssign(T v, int i1, int i2, int i3) { if(dimCount != 3) throw new SyntaxError(); - if(i1 >= dim[0] && i2 >= dim[1] && i3 >= dim[2]) throw new SubscriptOutOfRange(); + if(i1 >= dim[2] || i2 >= dim[1] || i3 >= dim[0]) throw new SubscriptOutOfRange(); return array[i1 * dim[0] * dim[1] + i2 * dim[0] + i3] = v; } T opIndexAssign(T v, int i1, int i2, int i3, int i4) { if(dimCount != 4) throw new SyntaxError(); - if(i1 >= dim[0] && i2 >= dim[1] && i3 >= dim[2] && i4 >= dim[3]) throw new SubscriptOutOfRange(); + if(i1 >= dim[3] || i2 >= dim[2] || i3 >= dim[1] || i4 >= dim[0]) throw new SubscriptOutOfRange(); return array[i1] = v;//array[i1 * dim[0] * dim[1] * dim[2] + i2 * dim[1] + i3] = v; } void push(T v)