From 1ddf7ced4b56abeb4a00577849f8b6ef0dfd522387e73529d7bd8b0e9ebac113 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Fri, 4 Apr 2025 13:05:06 +0300 Subject: [PATCH] Check number of schema command arguments --- c/lib/schema.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/c/lib/schema.c b/c/lib/schema.c index b9045d2..6324b6b 100644 --- a/c/lib/schema.c +++ b/c/lib/schema.c @@ -177,6 +177,11 @@ Eached: err.code = KEKSSchemaErrNo; } else if (KEKSStrEqual(&(schema->list[idxSchema].atom), CmdTake)) { idxSchema = schema->list[idxSchema].next; + if (idxSchema == 0) { + err.code = KEKSSchemaErrInvalidSchema; + err.msg = "wrong number of args"; + return err; + } err.offSchema = schema->offsets[idxSchema]; switch (schema->list[idxSchema].atom.typ) { case KEKSItemStr: @@ -285,6 +290,11 @@ Eached: enum KEKSItemType expected[16] = {KEKSItemInvalid}; size_t idxExpected = 0; idxSchema = schema->list[idxSchema].next; + if (idxSchema == 0) { + err.code = KEKSSchemaErrInvalidSchema; + err.msg = "wrong number of args"; + return err; + } while (idxSchema != 0) { err.offSchema = schema->offsets[idxSchema]; if (schema->list[idxSchema].atom.typ != KEKSItemStr) { @@ -355,6 +365,11 @@ Eached: err.code = KEKSSchemaErrNo; } else { idxSchema = schema->list[idxSchema].next; + if (idxSchema == 0) { + err.code = KEKSSchemaErrInvalidSchema; + err.msg = "wrong number of args"; + return err; + } err.offSchema = schema->offsets[idxSchema]; err.offData = data->offsets[*taken]; int64_t our = 0; @@ -372,6 +387,11 @@ Eached: err.code = KEKSSchemaErrNo; } else { idxSchema = schema->list[idxSchema].next; + if (idxSchema == 0) { + err.code = KEKSSchemaErrInvalidSchema; + err.msg = "wrong number of args"; + return err; + } err.offSchema = schema->offsets[idxSchema]; err.offData = data->offsets[*taken]; int64_t our = 0; @@ -385,6 +405,11 @@ Eached: } } else if (KEKSStrEqual(&(schema->list[idxSchema].atom), CmdSchema)) { idxSchema = schema->list[idxSchema].next; + if (idxSchema == 0) { + err.code = KEKSSchemaErrInvalidSchema; + err.msg = "wrong number of args"; + return err; + } err.offSchema = schema->offsets[idxSchema]; if (schema->list[idxSchema].atom.typ != KEKSItemStr) { err.code = KEKSSchemaErrInvalidSchema; @@ -415,6 +440,11 @@ Eached: } } else if (KEKSStrEqual(&(schema->list[idxSchema].atom), CmdTimeMaxPrec)) { idxSchema = schema->list[idxSchema].next; + if (idxSchema == 0) { + err.code = KEKSSchemaErrInvalidSchema; + err.msg = "wrong number of args"; + return err; + } err.offSchema = schema->offsets[idxSchema]; if (schema->list[idxSchema].atom.typ != KEKSItemPint) { err.code = KEKSSchemaErrInvalidSchema; -- 2.48.1