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/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 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: