···5454 in
5555 (key, value)
56565757-let make_prefix key = encode_u32_be (String.length key) ^ key
5757+let prefix key = encode_u32_be (String.length key) ^ key
58585959(* Database operations *)
6060···100100 { pager; index; tables = Hashtbl.create 8 }
101101102102let get t key =
103103- let prefix = make_prefix key in
103103+ let prefix = prefix key in
104104 match Btree.Index.by_prefix t.index prefix with
105105 | None -> None
106106 | Some entry ->
···108108 if found_key = key then Some value else None
109109110110let put t key value =
111111- let prefix = make_prefix key in
111111+ let prefix = prefix key in
112112 (* Delete any existing entry for this key *)
113113 Btree.Index.delete_by_prefix t.index prefix;
114114 (* Insert new entry *)
···116116 Btree.Index.insert t.index entry
117117118118let delete t key =
119119- let prefix = make_prefix key in
119119+ let prefix = prefix key in
120120 Btree.Index.delete_by_prefix t.index prefix
121121122122let mem t key =
123123- let prefix = make_prefix key in
123123+ let prefix = prefix key in
124124 match Btree.Index.by_prefix t.index prefix with
125125 | None -> false
126126 | Some entry ->
···187187 { parent; name; index }
188188189189 let get t key =
190190- let prefix = make_prefix key in
190190+ let prefix = prefix key in
191191 match Btree.Index.by_prefix t.index prefix with
192192 | None -> None
193193 | Some entry ->
···195195 if found_key = key then Some value else None
196196197197 let put t key value =
198198- let prefix = make_prefix key in
198198+ let prefix = prefix key in
199199 Btree.Index.delete_by_prefix t.index prefix;
200200 let entry = encode_entry key value in
201201 Btree.Index.insert t.index entry
202202203203 let delete t key =
204204- let prefix = make_prefix key in
204204+ let prefix = prefix key in
205205 Btree.Index.delete_by_prefix t.index prefix
206206207207 let mem t key =
208208- let prefix = make_prefix key in
208208+ let prefix = prefix key in
209209 match Btree.Index.by_prefix t.index prefix with
210210 | None -> false
211211 | Some entry ->
+2-3
test/test_sqlite.ml
···455455456456(* Regression tests based on SQLite CVE patterns *)
457457458458-let test_cve_like_overflow_key_length () =
458458+let test_cve_key_overflow () =
459459 with_temp_db @@ fun _fs db ->
460460 (* Ensure large key doesn't cause integer overflow in length encoding *)
461461 let key = String.make 500 'x' in
···537537 Alcotest.test_case "many tables" `Quick test_many_tables;
538538 ];
539539 [
540540- Alcotest.test_case "overflow key length" `Quick
541541- test_cve_like_overflow_key_length;
540540+ Alcotest.test_case "overflow key length" `Quick test_cve_key_overflow;
542541 Alcotest.test_case "boundary conditions" `Quick
543542 test_cve_like_boundary_conditions;
544543 ];