db_tutorial icon indicating copy to clipboard operation
db_tutorial copied to clipboard

Part 5: page_num out of bounds

Open duncanchiu409 opened this issue 2 years ago • 1 comments

If page_num start from 0 to TABLE_MAX_PAGE - 1, not 1, the if statement should be this instead. Tell me if I am right or wrong.

void* get_page(Pager* pager, uint32_t page_number){
    if(page_number >= TABLE_MAX_PAGES){
        printf("Tried to fetch page number out of bounds. %d > %d\n", page_number, TABLE_MAX_PAGES);
        exit(EXIT_FAILURE);
    }

duncanchiu409 avatar Jul 28 '23 02:07 duncanchiu409

I noticed the same problem. I think you're right.

Maybe there's a similar problem also in the function get_page (line 248 in db.c):

void* get_page(Pager* pager, uint32_t page_number){
    ...
    if (page_num <= num_pages) {
        lseek(pager->file_descriptor, page_num * PAGE_SIZE, SEEK_SET);
        ...
    }
    ...
 }

(line 248 in db.c)if (page_num <= num_pages) I think it should be if (page_num < num_pages). Since the page_num is an index starts from 0 to TABLE_MAX_PAGE - 1, and the num_pages starts from 1.

I'm not quite sure. Could you please tell me if I am right or wrong? Thanks so much.

skypaver avatar Aug 08 '23 08:08 skypaver