1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

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
This commit is contained in:
Andres Freund
2017-10-09 15:20:42 -07:00
parent 8a241792f9
commit 82c117cb90

View File

@ -21,6 +21,7 @@
#include "postgres.h" #include "postgres.h"
#include "common/string.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "utils/memdebug.h" #include "utils/memdebug.h"
#include "utils/memutils.h" #include "utils/memutils.h"
@ -1086,10 +1087,14 @@ pstrdup(const char *in)
char * char *
pnstrdup(const char *in, Size len) 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); memcpy(out, in, len);
out[len] = '\0'; out[len] = '\0';
return out; return out;
} }