Check Zed.next_error index value is within the string length (#442)
This fixes Zed.Out_of_bound errors Co-authored-by: Etienne Millon <me@emillon.org>
This commit is contained in:
parent
87871f442e
commit
351741b820
|
@ -849,6 +849,9 @@ let prompt_comment = ref (S.const [| |])
|
||||||
module Private = struct
|
module Private = struct
|
||||||
let fix_string str =
|
let fix_string str =
|
||||||
let len = String.length str in
|
let len = String.length str in
|
||||||
|
if len = 0 then
|
||||||
|
str
|
||||||
|
else
|
||||||
let ofs, _, _ = Zed_utf8.next_error str 0 in
|
let ofs, _, _ = Zed_utf8.next_error str 0 in
|
||||||
if ofs = len then
|
if ofs = len then
|
||||||
str
|
str
|
||||||
|
@ -858,6 +861,7 @@ module Private = struct
|
||||||
let rec loop ofs =
|
let rec loop ofs =
|
||||||
Zed_utf8.add buf (Uchar.of_char str.[ofs]);
|
Zed_utf8.add buf (Uchar.of_char str.[ofs]);
|
||||||
let ofs1 = ofs + 1 in
|
let ofs1 = ofs + 1 in
|
||||||
|
if ofs1 < len then
|
||||||
let ofs2, _, _ = Zed_utf8.next_error str ofs1 in
|
let ofs2, _, _ = Zed_utf8.next_error str ofs1 in
|
||||||
if ofs1 < ofs2 then
|
if ofs1 < ofs2 then
|
||||||
Buffer.add_substring buf str ofs1 (ofs2 - ofs1);
|
Buffer.add_substring buf str ofs1 (ofs2 - ofs1);
|
||||||
|
@ -865,6 +869,8 @@ module Private = struct
|
||||||
loop ofs2
|
loop ofs2
|
||||||
else
|
else
|
||||||
Buffer.contents buf
|
Buffer.contents buf
|
||||||
|
else
|
||||||
|
Buffer.contents buf
|
||||||
in
|
in
|
||||||
loop ofs
|
loop ofs
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,7 @@ let test_fix_string =
|
||||||
in
|
in
|
||||||
( "fix_string"
|
( "fix_string"
|
||||||
, [ test ~name:"small" "x" ~expected:"x"
|
, [ test ~name:"small" "x" ~expected:"x"
|
||||||
|
; test ~name:"empty" "" ~expected:""
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue