mirror of
https://github.com/postgres/postgres.git
synced 2025-07-18 17:42:25 +03:00
Put in some more safeguards against executing a division-by-zero.
Add dummy returns before every potential division-by-zero in int8.c, because apparently further "improvements" in gcc's optimizer have enabled it to break functions that weren't broken before. Aurelien Jarno, via Martin Pitt
This commit is contained in:
@ -592,9 +592,13 @@ int8div(PG_FUNCTION_ARGS)
|
|||||||
int64 result;
|
int64 result;
|
||||||
|
|
||||||
if (arg2 == 0)
|
if (arg2 == 0)
|
||||||
|
{
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
||||||
errmsg("division by zero")));
|
errmsg("division by zero")));
|
||||||
|
/* ensure compiler realizes we mustn't reach the division (gcc bug) */
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
result = arg1 / arg2;
|
result = arg1 / arg2;
|
||||||
|
|
||||||
@ -639,9 +643,14 @@ int8mod(PG_FUNCTION_ARGS)
|
|||||||
int64 arg2 = PG_GETARG_INT64(1);
|
int64 arg2 = PG_GETARG_INT64(1);
|
||||||
|
|
||||||
if (arg2 == 0)
|
if (arg2 == 0)
|
||||||
|
{
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
||||||
errmsg("division by zero")));
|
errmsg("division by zero")));
|
||||||
|
/* ensure compiler realizes we mustn't reach the division (gcc bug) */
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
/* No overflow is possible */
|
/* No overflow is possible */
|
||||||
|
|
||||||
PG_RETURN_INT64(arg1 % arg2);
|
PG_RETURN_INT64(arg1 % arg2);
|
||||||
@ -815,9 +824,13 @@ int84div(PG_FUNCTION_ARGS)
|
|||||||
int64 result;
|
int64 result;
|
||||||
|
|
||||||
if (arg2 == 0)
|
if (arg2 == 0)
|
||||||
|
{
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
||||||
errmsg("division by zero")));
|
errmsg("division by zero")));
|
||||||
|
/* ensure compiler realizes we mustn't reach the division (gcc bug) */
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
result = arg1 / arg2;
|
result = arg1 / arg2;
|
||||||
|
|
||||||
@ -999,9 +1012,13 @@ int82div(PG_FUNCTION_ARGS)
|
|||||||
int64 result;
|
int64 result;
|
||||||
|
|
||||||
if (arg2 == 0)
|
if (arg2 == 0)
|
||||||
|
{
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
(errcode(ERRCODE_DIVISION_BY_ZERO),
|
||||||
errmsg("division by zero")));
|
errmsg("division by zero")));
|
||||||
|
/* ensure compiler realizes we mustn't reach the division (gcc bug) */
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
}
|
||||||
|
|
||||||
result = arg1 / arg2;
|
result = arg1 / arg2;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user