From 388f43addc4a94681f27853defe9f46ec1b9ee63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Thu, 23 Apr 2020 06:47:13 -0300 Subject: Fix page going out of bounds on move and insert --- page.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/page.c b/page.c index e084705..1244df4 100644 --- a/page.c +++ b/page.c @@ -57,25 +57,31 @@ void free_page(struct page *page) { } void move_gap_forward(struct page *page) { - page->elements[page->gap_start] = page->elements[page->gap_end]; - page->gap_start++; - page->gap_end++; + if (page->gap_end < PAGE_SIZE) { + page->elements[page->gap_start] = page->elements[page->gap_end]; + page->gap_start++; + page->gap_end++; + } } void move_gap_backward(struct page *page) { - page->gap_end--; - page->gap_start--; - page->elements[page->gap_end] = page->elements[page->gap_start]; + if (page->gap_start > 0) { + page->gap_end--; + page->gap_start--; + page->elements[page->gap_end] = page->elements[page->gap_start]; + } } void insert_at_gap(struct page *page, uint8_t c) { - page->elements[page->gap_start] = c; - page->gap_start++; - page->element_count++; + if (page->element_count < PAGE_SIZE) { + page->elements[page->gap_start] = c; + page->gap_start++; + page->element_count++; + } } void delete_at_gap(struct page *page) { - if (page->gap_start) { + if (page->gap_start > 0) { page->gap_start--; page->element_count--; } -- cgit v1.2.3