mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Avoid calling memcpy() with a NULL source pointer and count == 0.
As in commit 0a52d378b0
, avoid doing something that has undefined
results according to the C standard, even though in practice there does
not seem to be any problem with it.
This fixes two places in numeric.c that demonstrably could call memcpy()
with such arguments. I looked through that file and didn't see any other
places with similar hazards; this is not to claim that there are not such
places in other files.
Per report from Piotr Stefaniak. Back-patch to 9.5 which is where the
previous commit was added. We're more or less setting a precedent that
we will not worry about this type of issue in pre-9.5 branches unless
someone demonstrates a problem in the field.
This commit is contained in:
parent
cb3384a0cb
commit
13bba02271
@ -4769,7 +4769,9 @@ set_var_from_var(NumericVar *value, NumericVar *dest)
|
||||
|
||||
newbuf = digitbuf_alloc(value->ndigits + 1);
|
||||
newbuf[0] = 0; /* spare digit for rounding */
|
||||
memcpy(newbuf + 1, value->digits, value->ndigits * sizeof(NumericDigit));
|
||||
if (value->ndigits > 0) /* else value->digits might be null */
|
||||
memcpy(newbuf + 1, value->digits,
|
||||
value->ndigits * sizeof(NumericDigit));
|
||||
|
||||
digitbuf_free(dest->buf);
|
||||
|
||||
@ -5090,8 +5092,9 @@ make_result(NumericVar *var)
|
||||
result->choice.n_long.n_weight = weight;
|
||||
}
|
||||
|
||||
memcpy(NUMERIC_DIGITS(result), digits, n * sizeof(NumericDigit));
|
||||
Assert(NUMERIC_NDIGITS(result) == n);
|
||||
if (n > 0)
|
||||
memcpy(NUMERIC_DIGITS(result), digits, n * sizeof(NumericDigit));
|
||||
|
||||
/* Check for overflow of int16 fields */
|
||||
if (NUMERIC_WEIGHT(result) != weight ||
|
||||
|
Loading…
Reference in New Issue
Block a user