File tree Expand file tree Collapse file tree 3 files changed +12
-5
lines changed Expand file tree Collapse file tree 3 files changed +12
-5
lines changed Original file line number Diff line number Diff line change 1
1
2
+ - fixed division by zero in rotations of 0-length vectors
3
+ (reported by Nikolaus Huber)
2
4
- fixed integer overflows in bound tests in ` fill ` , ` blit ` , ` sub `
3
5
(fix by Nikolaus Huber)
4
6
Original file line number Diff line number Diff line change @@ -406,10 +406,10 @@ let rec rotatel v d =
406
406
rotater v (- d)
407
407
else
408
408
let n = v.length in
409
- let d = d mod n in
410
- if d == 0 then
409
+ if d == 0 || n == 0 then
411
410
copy v
412
411
else begin
412
+ let d = d mod n in
413
413
let r = create n false in
414
414
unsafe_blit v.bits 0 r.bits d (n - d); (* shiftl *)
415
415
unsafe_blit v.bits (n - d) r.bits 0 d; (* wraparound ms to ls *)
@@ -421,10 +421,10 @@ and rotater v d =
421
421
rotatel v (- d)
422
422
else
423
423
let n = v.length in
424
- let d = d mod n in
425
- if d == 0 then
424
+ if d == 0 || n == 0 then
426
425
copy v
427
426
else begin
427
+ let d = d mod n in
428
428
let r = create n false in
429
429
unsafe_blit v.bits d r.bits 0 (n - d); (* shiftr *)
430
430
unsafe_blit v.bits 0 r.bits (n - d) d; (* wraparound ls to ms *)
Original file line number Diff line number Diff line change @@ -90,7 +90,12 @@ let () =
90
90
let v = of_string " 110101110" in
91
91
assert (equal (rotatel v 1 ) (of_string " 101011101" ));
92
92
assert (equal (rotatel v (- 1 )) (of_string " 011010111" ));
93
- assert (equal (rotater v 1 ) (of_string " 011010111" ))
93
+ assert (equal (rotater v 1 ) (of_string " 011010111" ));
94
+ (* 0-length rotation *)
95
+ let v = create 0 false in
96
+ assert (length (rotatel v 0 ) = 0 );
97
+ assert (length (rotater v 0 ) = 0 );
98
+ ()
94
99
95
100
let test_rotate n =
96
101
let v = init n (fun _ -> Random. bool () ) in
You can’t perform that action at this time.
0 commit comments