summaryrefslogtreecommitdiffstats
path: root/stdlib/array.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2012-08-28 15:08:30 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2012-08-28 15:08:30 +0000
commit7cb5ba33fce9af31ff3ab57de5b580df95bdc41a (patch)
treea830dcd631ef74aa94ae51ed98dd16366afd6ec5 /stdlib/array.ml
parent61789ae70d65dc3502935fe69d59d8b370856e6c (diff)
PR#5742: missing bound checks in Array.sub (picking r12891 from 4.00 branch)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12892 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'stdlib/array.ml')
-rw-r--r--stdlib/array.ml11
1 files changed, 8 insertions, 3 deletions
diff --git a/stdlib/array.ml b/stdlib/array.ml
index 37c663dc1..d17582a43 100644
--- a/stdlib/array.ml
+++ b/stdlib/array.ml
@@ -22,7 +22,7 @@ external unsafe_get: 'a array -> int -> 'a = "%array_unsafe_get"
external unsafe_set: 'a array -> int -> 'a -> unit = "%array_unsafe_set"
external make: int -> 'a -> 'a array = "caml_make_vect"
external create: int -> 'a -> 'a array = "caml_make_vect"
-external sub : 'a array -> int -> int -> 'a array = "caml_array_sub"
+external unsafe_sub : 'a array -> int -> int -> 'a array = "caml_array_sub"
external append_prim : 'a array -> 'a array -> 'a array = "caml_array_append"
external concat : 'a array list -> 'a array = "caml_array_concat"
external unsafe_blit : 'a array -> int -> 'a array -> int -> int -> unit = "caml_array_blit"
@@ -45,14 +45,19 @@ let make_matrix sx sy init =
let create_matrix = make_matrix
let copy a =
- let l = length a in if l = 0 then [||] else sub a 0 l
+ let l = length a in if l = 0 then [||] else unsafe_sub a 0 l
let append a1 a2 =
let l1 = length a1 in
if l1 = 0 then copy a2
- else if length a2 = 0 then sub a1 0 l1
+ else if length a2 = 0 then unsafe_sub a1 0 l1
else append_prim a1 a2
+let sub a ofs len =
+ if len < 0 || ofs > length a - len
+ then invalid_arg "Array.sub"
+ else unsafe_sub a ofs len
+
let fill a ofs len v =
if ofs < 0 || len < 0 || ofs > length a - len
then invalid_arg "Array.fill"