From: Andres Freund Date: Mon, 9 Oct 2017 22:20:42 +0000 (-0700) Subject: Fix pnstrdup() to not memcpy() the maximum allowed length. X-Git-Tag: REL_11_BETA1~1421 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=82c117cb90e6b6b79f06d61eb1ddf06e94e75b60;p=thirdparty%2Fpostgresql.git Fix pnstrdup() to not memcpy() the maximum allowed length. The previous behaviour was dangerous if the length passed wasn't the size of the underlying buffer, but the maximum size of the underlying buffer. Author: Andres Freund Discussion: https://postgr.es/m/20161003215524.mwz5p45pcverrkyk@alap3.anarazel.de --- diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index cd696f16bc7..64e0408d5af 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -21,6 +21,7 @@ #include "postgres.h" +#include "common/string.h" #include "miscadmin.h" #include "utils/memdebug.h" #include "utils/memutils.h" @@ -1086,10 +1087,14 @@ pstrdup(const char *in) char * pnstrdup(const char *in, Size len) { - char *out = palloc(len + 1); + char *out; + len = pg_strnlen(in, len); + + out = palloc(len + 1); memcpy(out, in, len); out[len] = '\0'; + return out; }