From 78aa27c01924d183a7a286fca8424f0df57a1f2b Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 21 Oct 2022 19:53:15 +0200 Subject: [PATCH] Add more checks --- brood/src/data.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/brood/src/data.rs b/brood/src/data.rs index c994d66..3c75122 100644 --- a/brood/src/data.rs +++ b/brood/src/data.rs @@ -120,6 +120,22 @@ pub struct AdjacencyList { impl AdjacencyList { pub fn check_consistency(&self) { + // Check that all types are large enough + assert!(self.pages.len() <= u32::MAX as usize, "pages len"); + assert!(self.links.len() <= u32::MAX as usize, "links len"); + for page in &self.pages { + assert!(page.link_idx <= u32::MAX as u32, "page link_idx"); + assert!(page.id <= u32::MAX as u32, "page id"); + assert!(page.length <= u32::MAX as u32, "page length"); + assert!(page.title.len() <= u8::MAX as usize, "page title len"); + } + for link in &self.links { + assert!(link.to <= u32::MAX as u32, "link to"); + assert!(link.start <= u32::MAX as u32, "link start"); + assert!(link.end <= u32::MAX as u32, "link end"); + } + + // Check that all links contain valid indices let range = 0..self.pages.len() as u32; for link in &self.links { if !range.contains(&link.to) {