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
pull/31/head^2
Andres Freund 8 years ago
parent 8a241792f9
commit 82c117cb90
  1. 7
      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;
}

Loading…
Cancel
Save