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
1 changed files with 6 additions and 1 deletions

View File

@ -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;
}