From: Sergey Matveev Date: Fri, 4 Apr 2025 10:05:06 +0000 (+0300) Subject: Check number of schema command arguments X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1ddf7ced4b56abeb4a00577849f8b6ef0dfd522387e73529d7bd8b0e9ebac113;p=keks.git Check number of schema command arguments --- 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;