From a06fb311c23284a1de1fddedf63f673941bfeda1 Mon Sep 17 00:00:00 2001 From: 1000TurquoisePogs Date: Thu, 9 May 2024 04:33:28 -0400 Subject: [PATCH 1/2] Allow strings to be null for backward compat on recent bugfix Signed-off-by: 1000TurquoisePogs --- c/jsonschema.c | 24 +++++++++++++++++++++++- h/jsonschema.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/c/jsonschema.c b/c/jsonschema.c index 525ac1653..60448870c 100644 --- a/c/jsonschema.c +++ b/c/jsonschema.c @@ -1108,7 +1108,27 @@ static JSValueSpec *resolveRef(JsonValidator *validator, ValidityException *pend static VResult validateJSONSimple(JsonValidator *validator, Json *value, JSValueSpec *valueSpec, int depth, EvalSet *evalSetList){ if (jsonIsNull(value)){ - return validateType(validator,JSTYPE_NULL,valueSpec,depth+1); + VResult typeResult = validateType(validator,JSTYPE_NULL,valueSpec,depth+1); + if (vStatusValid(typeResult.status)) { + return typeResult; + } else if (validator->allowStringToBeNull) { + // FIXME: Some users were relying upon a bug we fixed, where an empty value would be treated as a string. + // TODO: Remove this in v3, we should not keep this bug compatability forever. + if (((1 << JSTYPE_STRING) & valueSpec->typeMask) != 0){ + Json *emptyStringJson = (Json*)safeMalloc(sizeof(Json), "Empty String JSON"); + emptyStringJson->type = JSON_TYPE_STRING; + char emptyString[1] = {0}; + emptyStringJson->data.string = emptyString; + // Check if schema is okay with an "empty string" as the previous bug had null be empty string. + VResult stringResult = validateJSONString(validator,emptyStringJson,valueSpec,depth+1); + safeFree((char*)emptyStringJson, sizeof(Json)); + return stringResult; + } else{ + return simpleFailure(validator, "string cannot be null for %s\n", validatorAccessPath(validator)); + } + } else { + return typeResult; + } } else if (jsonIsBoolean(value)){ return validateType(validator,JSTYPE_BOOLEAN,valueSpec,depth+1); } else if (jsonIsObject(value)){ @@ -1420,6 +1440,8 @@ static VResult validateJSON(JsonValidator *validator, int jsonValidateSchema(JsonValidator *validator, Json *value, JsonSchema *topSchema, JsonSchema **otherSchemas, int otherSchemaCount){ int result = 0; + validator->allowStringToBeNull = true; + if (setjmp(validator->recoveryData) == 0) { /* normal execution */ validator->topSchema = topSchema; validator->otherSchemas = otherSchemas; diff --git a/h/jsonschema.h b/h/jsonschema.h index 4b8543334..0bf703e31 100644 --- a/h/jsonschema.h +++ b/h/jsonschema.h @@ -117,6 +117,7 @@ typedef struct JsonValidator_tag { int fileRegexError; jmp_buf recoveryData; ShortLivedHeap *evalHeap; + bool allowStringToBeNull; } JsonValidator; #define JSON_SCHEMA_DRAFT_4 400 From d3f50cba5f519127f7dd316a21f1e58d368e029d Mon Sep 17 00:00:00 2001 From: James Struga Date: Tue, 14 May 2024 22:48:11 -0400 Subject: [PATCH 2/2] Update staging with new changes Signed-off-by: James Struga --- build/configmgr.proj.env | 2 +- build/getesm.proj.env | 2 +- manifest.template.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/configmgr.proj.env b/build/configmgr.proj.env index 7e741350e..bbbf917c8 100644 --- a/build/configmgr.proj.env +++ b/build/configmgr.proj.env @@ -1,5 +1,5 @@ PROJECT="configmgr" -VERSION=2.17.0 +VERSION=2.16.0 DEPS="QUICKJS LIBYAML" QUICKJS="quickjs" diff --git a/build/getesm.proj.env b/build/getesm.proj.env index a47c9045c..0f7d7f54d 100644 --- a/build/getesm.proj.env +++ b/build/getesm.proj.env @@ -1,3 +1,3 @@ PROJECT="getesm" -VERSION=2.17.0 +VERSION=2.16.0 DEPS="" diff --git a/manifest.template.yaml b/manifest.template.yaml index 8796bb058..56a21f1f9 100644 --- a/manifest.template.yaml +++ b/manifest.template.yaml @@ -1,7 +1,7 @@ --- name: zowe-common-c -version: 2.17.0 +version: 2.16.0 homepage: https://zowe.org keywords: