diff --git a/core/lib.rs b/core/lib.rs index 230150667..57d25cf28 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -470,9 +470,10 @@ impl Database { if let Some(shared_wal) = maybe_shared_wal { let size_in_wal = shared_wal.page_size(); if size_in_wal != 0 { - return Ok(PageSize::new(size_in_wal).unwrap_or_else(|| { - panic!("invalid page size in WAL: {size_in_wal}"); - })); + let Some(page_size) = PageSize::new(size_in_wal) else { + bail_corrupt_error!("invalid page size in WAL: {size_in_wal}"); + }; + return Ok(page_size); } } if self.db_state.is_initialized() { @@ -481,9 +482,10 @@ impl Database { let Some(size) = requested_page_size else { return Ok(PageSize::default()); }; - Ok(PageSize::new(size as u32).unwrap_or_else(|| { - panic!("invalid requested page size: {size}"); - })) + let Some(page_size) = PageSize::new(size as u32) else { + bail_corrupt_error!("invalid requested page size: {size}"); + }; + Ok(page_size) } } diff --git a/core/storage/wal.rs b/core/storage/wal.rs index 63c0fbde5..a8f72b963 100644 --- a/core/storage/wal.rs +++ b/core/storage/wal.rs @@ -19,7 +19,7 @@ use crate::storage::sqlite3_ondisk::{ write_pages_vectored, PageSize, WAL_FRAME_HEADER_SIZE, WAL_HEADER_SIZE, }; use crate::types::{IOCompletions, IOResult}; -use crate::{turso_assert, Buffer, LimboError, Result}; +use crate::{bail_corrupt_error, turso_assert, Buffer, LimboError, Result}; use crate::{Completion, Page}; use self::sqlite3_ondisk::{checksum_wal, PageContent, WAL_MAGIC_BE, WAL_MAGIC_LE}; @@ -956,9 +956,10 @@ impl Wal for WalFile { db_size: u64, page: &[u8], ) -> Result<()> { - self.ensure_header_if_needed(PageSize::new(page.len() as u32).unwrap_or_else(|| { - panic!("invalid page size: {}", page.len()); - }))?; + let Some(page_size) = PageSize::new(page.len() as u32) else { + bail_corrupt_error!("invalid page size: {}", page.len()); + }; + self.ensure_header_if_needed(page_size)?; tracing::debug!("write_raw_frame({})", frame_id); if page.len() != self.page_size() as usize { return Err(LimboError::InvalidArgument(format!(