From 4cd0f03b0a0c425973c566b15d3c4a7971d062ea Mon Sep 17 00:00:00 2001 From: yukirij Date: Sat, 26 Aug 2023 12:13:11 -0700 Subject: [PATCH] Minor fix to prevent creation of schemas with invalid types. --- src/bin/main.rs | 12 ++++++------ src/runtime/lib.cc | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/bin/main.rs b/src/bin/main.rs index b32de57..52a9164 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -5,12 +5,6 @@ fn main() { const MAGAZINE :usize = 0x100; const MAGAZINE_ROW :usize = 0x101; - // define schema "Magazine Row" - szun::Schema::with(vec![ - ("Content", szun::natural()), - ("Quantity", szun::natural()), - ]).bind(MAGAZINE_ROW); - // define schema "Magazine" let magazine = szun::Schema::with(vec![ ("Capacity", szun::natural()), @@ -19,6 +13,12 @@ fn main() { ]); magazine.bind(MAGAZINE); + // define schema "Magazine Row" + szun::Schema::with(vec![ + ("Content", szun::natural()), + ("Quantity", szun::natural()), + ]).bind(MAGAZINE_ROW); + // create record "Magazine" let _data = szun::Record::with(MAGAZINE, vec![ ("Capacity", *szun::Natural::with(30)), diff --git a/src/runtime/lib.cc b/src/runtime/lib.cc index bddb332..02a12ad 100644 --- a/src/runtime/lib.cc +++ b/src/runtime/lib.cc @@ -1250,6 +1250,10 @@ extern "C" size_t schema_bind(Reference addr, size_t id) size_t type_id = *reinterpret_cast(rawlist_cell(object.data, sizeof(size_t), i)); size_t size = type_size(type_id); + + // fail if size is not valid + if(size == 0) { return 0; } + size_t alignment = type_alignment(type_id); binding.alignment = std::max(alignment, binding.alignment); size_t position = ((binding.size + (alignment - 1)) & ~(alignment - 1)); @@ -1290,9 +1294,9 @@ extern "C" size_t schema_bind(Reference addr, size_t id) // add binding to pool DB_SCHEMA.set(id, binding); + return id; } - - return id; + return 0; } extern "C" bool schema_has(size_t id)