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
#include "postgres.h"
+#include "common/string.h"
#include "miscadmin.h"
#include "utils/memdebug.h"
#include "utils/memutils.h"
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;
}