From afeb6dfcdfe55c18ad0db7fc07546d12b779f15b Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Thu, 27 Nov 2014 14:04:57 +0900 Subject: [PATCH] deparse: Fix string handling in expand_jsonval_strlit() Per comment in jsonb.h: "Not necessarily null-terminated" --- src/backend/utils/adt/ddl_json.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/ddl_json.c b/src/backend/utils/adt/ddl_json.c index 5b515729dd..7ec13f7dbc 100644 --- a/src/backend/utils/adt/ddl_json.c +++ b/src/backend/utils/adt/ddl_json.c @@ -425,13 +425,14 @@ expand_jsonval_strlit(StringInfo buf, JsonbValue *jsonval) static const char dqsuffixes[] = "_XYZZYX_"; int dqnextchar = 0; - str = jsonval->val.string.val; + str = pnstrdup(jsonval->val.string.val, jsonval->val.string.len); /* easy case: if there are no ' and no \, just use a single quote */ if (strchr(str, '\'') == NULL && strchr(str, '\\') == NULL) { appendStringInfo(buf, "'%s'", str); + pfree(str); return; } @@ -449,6 +450,7 @@ expand_jsonval_strlit(StringInfo buf, JsonbValue *jsonval) /* And finally produce the quoted literal into the output StringInfo */ appendStringInfo(buf, "%s%s%s", dqdelim.data, str, dqdelim.data); pfree(dqdelim.data); + pfree(str); } /* -- 2.39.5