mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-04 03:56:54 +02:00
Plug memory leak in range_cmp function.
B-tree operators are not allowed to leak memory into the current memory context. Range_cmp leaked detoasted copies of the arguments. That caused a quick out-of-memory error when creating an index on a range column. Reported by Marian Krucina, bug #8468.
This commit is contained in:
parent
b2fc4d6142
commit
77ae7f7c35
@ -1125,16 +1125,22 @@ range_cmp(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
/* For b-tree use, empty ranges sort before all else */
|
/* For b-tree use, empty ranges sort before all else */
|
||||||
if (empty1 && empty2)
|
if (empty1 && empty2)
|
||||||
PG_RETURN_INT32(0);
|
cmp = 0;
|
||||||
else if (empty1)
|
else if (empty1)
|
||||||
PG_RETURN_INT32(-1);
|
cmp = -1;
|
||||||
else if (empty2)
|
else if (empty2)
|
||||||
PG_RETURN_INT32(1);
|
cmp = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmp = range_cmp_bounds(typcache, &lower1, &lower2);
|
||||||
|
if (cmp == 0)
|
||||||
|
cmp = range_cmp_bounds(typcache, &upper1, &upper2);
|
||||||
|
}
|
||||||
|
|
||||||
if ((cmp = range_cmp_bounds(typcache, &lower1, &lower2)) != 0)
|
PG_FREE_IF_COPY(r1, 0);
|
||||||
PG_RETURN_INT32(cmp);
|
PG_FREE_IF_COPY(r2, 1);
|
||||||
|
|
||||||
PG_RETURN_INT32(range_cmp_bounds(typcache, &upper1, &upper2));
|
PG_RETURN_INT32(cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* inequality operators using the range_cmp function */
|
/* inequality operators using the range_cmp function */
|
||||||
|
Loading…
Reference in New Issue
Block a user