aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Misch <noah@leadboat.com>2015-10-05 10:06:29 -0400
committerNoah Misch <noah@leadboat.com>2015-10-05 10:06:35 -0400
commit8dacb29ca7c92814d69135f40e16a46f8cf9cbaf (patch)
tree01fe87c7ff0dd26aac30e403c2e7408b4be19f9a
parent56232f9879768e961485d8ba218da18c38768413 (diff)
downloadpostgresql-8dacb29ca7c92814d69135f40e16a46f8cf9cbaf.tar.gz
postgresql-8dacb29ca7c92814d69135f40e16a46f8cf9cbaf.zip
Prevent stack overflow in json-related functions.
Sufficiently-deep recursion heretofore elicited a SIGSEGV. If an application constructs PostgreSQL json or jsonb values from arbitrary user input, application users could have exploited this to terminate all active database connections. That applies to 9.3, where the json parser adopted recursive descent, and later versions. Only row_to_json() and array_to_json() were at risk in 9.2, both in a non-security capacity. Back-patch to 9.2, where the json type was introduced. Oskari Saarenmaa, reviewed by Michael Paquier. Security: CVE-2015-5289
-rw-r--r--src/backend/utils/adt/json.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index f0cbb395996..fd1d8fb988f 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -18,6 +18,7 @@
#include "lib/stringinfo.h"
#include "libpq/pqformat.h"
#include "mb/pg_wchar.h"
+#include "miscadmin.h"
#include "parser/parse_coerce.h"
#include "utils/array.h"
#include "utils/builtins.h"
@@ -895,6 +896,8 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
bool numeric_error;
JsonLexContext dummy_lex;
+ check_stack_depth();
+
if (is_null)
{
appendStringInfoString(result, "null");