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:
parent
8a241792f9
commit
82c117cb90
|
@ -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…
Reference in New Issue