Commit de68a8d
fix: Remove unchecked &buf[offset..] etc. in btree read path #4736
Replace panicking unchecked buffer indexing with bounds-checked access
throughout the btree read path. Corrupt cell pointers or varint data
now return LimboError::Corrupt instead of causing index-out-of-bounds
panics.
Changes:
- pager.rs: Add bounds checks in cell_table_interior_read_rowid,
cell_table_leaf_read_rowid, cell_index_read_payload_ptr, and
_cell_get_raw_region_faster (now returns Result)
- sqlite3_ondisk.rs: Add bounds checks in read_btree_cell for all
page types; make read_payload return Result with cell_len < 4 check
- btree.rs: Update callers of _cell_get_raw_region_faster for Result
- integrity_check.rs: Add tests for corrupt cell pointers on leaf and
interior pages, and for SELECT on corrupt pages; update existing
cell overflow test to assert no panic
Closes #4736
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent 38de7a6 commit de68a8d
File tree
5 files changed
+395
-57
lines changed- core
- storage
- tests/integration
5 files changed
+395
-57
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
180 | 180 | | |
181 | 181 | | |
182 | 182 | | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
183 | 212 | | |
184 | 213 | | |
185 | 214 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2957 | 2957 | | |
2958 | 2958 | | |
2959 | 2959 | | |
2960 | | - | |
| 2960 | + | |
2961 | 2961 | | |
2962 | 2962 | | |
2963 | 2963 | | |
| |||
3046 | 3046 | | |
3047 | 3047 | | |
3048 | 3048 | | |
3049 | | - | |
| 3049 | + | |
3050 | 3050 | | |
3051 | 3051 | | |
3052 | 3052 | | |
| |||
7691 | 7691 | | |
7692 | 7692 | | |
7693 | 7693 | | |
7694 | | - | |
| 7694 | + | |
7695 | 7695 | | |
7696 | 7696 | | |
7697 | 7697 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
397 | 397 | | |
398 | 398 | | |
399 | 399 | | |
400 | | - | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
401 | 404 | | |
402 | 405 | | |
403 | 406 | | |
| |||
411 | 414 | | |
412 | 415 | | |
413 | 416 | | |
414 | | - | |
415 | | - | |
416 | | - | |
417 | | - | |
418 | | - | |
419 | | - | |
420 | | - | |
421 | | - | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
422 | 423 | | |
423 | 424 | | |
424 | 425 | | |
| |||
435 | 436 | | |
436 | 437 | | |
437 | 438 | | |
438 | | - | |
| 439 | + | |
439 | 440 | | |
440 | | - | |
| 441 | + | |
441 | 442 | | |
442 | 443 | | |
443 | 444 | | |
| |||
461 | 462 | | |
462 | 463 | | |
463 | 464 | | |
464 | | - | |
| 465 | + | |
| 466 | + | |
465 | 467 | | |
466 | 468 | | |
467 | 469 | | |
468 | | - | |
| 470 | + | |
| 471 | + | |
469 | 472 | | |
470 | 473 | | |
471 | 474 | | |
| |||
484 | 487 | | |
485 | 488 | | |
486 | 489 | | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
487 | 496 | | |
488 | 497 | | |
489 | 498 | | |
490 | 499 | | |
491 | 500 | | |
492 | 501 | | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
493 | 510 | | |
494 | 511 | | |
495 | | - | |
496 | | - | |
497 | | - | |
| 512 | + | |
498 | 513 | | |
499 | 514 | | |
500 | 515 | | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
501 | 524 | | |
502 | 525 | | |
503 | | - | |
504 | | - | |
505 | | - | |
| 526 | + | |
506 | 527 | | |
507 | 528 | | |
508 | 529 | | |
| |||
540 | 561 | | |
541 | 562 | | |
542 | 563 | | |
543 | | - | |
| 564 | + | |
544 | 565 | | |
545 | 566 | | |
546 | 567 | | |
547 | 568 | | |
548 | 569 | | |
549 | 570 | | |
550 | | - | |
| 571 | + | |
551 | 572 | | |
552 | 573 | | |
553 | 574 | | |
| |||
559 | 580 | | |
560 | 581 | | |
561 | 582 | | |
562 | | - | |
| 583 | + | |
563 | 584 | | |
564 | 585 | | |
565 | 586 | | |
566 | 587 | | |
567 | 588 | | |
568 | | - | |
| 589 | + | |
| 590 | + | |
569 | 591 | | |
570 | 592 | | |
571 | 593 | | |
| |||
579 | 601 | | |
580 | 602 | | |
581 | 603 | | |
582 | | - | |
| 604 | + | |
| 605 | + | |
583 | 606 | | |
584 | 607 | | |
585 | 608 | | |
586 | | - | |
| 609 | + | |
| 610 | + | |
587 | 611 | | |
588 | 612 | | |
589 | 613 | | |
| |||
601 | 625 | | |
602 | 626 | | |
603 | 627 | | |
604 | | - | |
605 | | - | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
606 | 632 | | |
607 | 633 | | |
608 | 634 | | |
| |||
620 | 646 | | |
621 | 647 | | |
622 | 648 | | |
623 | | - | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
624 | 657 | | |
625 | 658 | | |
626 | 659 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
805 | 805 | | |
806 | 806 | | |
807 | 807 | | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
808 | 814 | | |
809 | 815 | | |
810 | 816 | | |
811 | | - | |
| 817 | + | |
812 | 818 | | |
813 | 819 | | |
814 | 820 | | |
815 | 821 | | |
816 | 822 | | |
817 | 823 | | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
818 | 831 | | |
819 | | - | |
| 832 | + | |
820 | 833 | | |
821 | 834 | | |
822 | 835 | | |
| |||
826 | 839 | | |
827 | 840 | | |
828 | 841 | | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
829 | 848 | | |
830 | 849 | | |
831 | 850 | | |
832 | | - | |
| 851 | + | |
833 | 852 | | |
834 | 853 | | |
835 | 854 | | |
836 | 855 | | |
837 | 856 | | |
838 | 857 | | |
839 | 858 | | |
840 | | - | |
| 859 | + | |
841 | 860 | | |
842 | 861 | | |
843 | 862 | | |
844 | 863 | | |
845 | 864 | | |
846 | 865 | | |
| 866 | + | |
| 867 | + | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
847 | 873 | | |
848 | | - | |
| 874 | + | |
849 | 875 | | |
850 | 876 | | |
851 | 877 | | |
| |||
854 | 880 | | |
855 | 881 | | |
856 | 882 | | |
857 | | - | |
| 883 | + | |
858 | 884 | | |
859 | | - | |
| 885 | + | |
860 | 886 | | |
861 | 887 | | |
862 | 888 | | |
863 | 889 | | |
864 | 890 | | |
865 | 891 | | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
866 | 899 | | |
867 | | - | |
| 900 | + | |
868 | 901 | | |
869 | 902 | | |
870 | 903 | | |
| |||
878 | 911 | | |
879 | 912 | | |
880 | 913 | | |
881 | | - | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
882 | 918 | | |
883 | 919 | | |
884 | 920 | | |
885 | 921 | | |
886 | | - | |
| 922 | + | |
887 | 923 | | |
888 | 924 | | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
889 | 931 | | |
890 | 932 | | |
891 | 933 | | |
892 | 934 | | |
893 | 935 | | |
894 | 936 | | |
895 | | - | |
| 937 | + | |
896 | 938 | | |
897 | 939 | | |
898 | 940 | | |
| |||
0 commit comments