postgres.git / summary / log / commit / refs

commit    03aab8262ae7b32f8fc6cd8933dce9604d7fc07e
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Fri Mar 11 23:18:59 2011 +0000

    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


src/backend/utils/adt/int8.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index 78bd5fb2b87..cde9313fdf9 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -592,9 +592,13 @@ int8div(PG_FUNCTION_ARGS) int64 result; if (arg2 == 0) + { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); + /* ensure compiler realizes we mustn't reach the division (gcc bug) */ + PG_RETURN_NULL(); + } result = arg1 / arg2; @@ -639,9 +643,14 @@ int8mod(PG_FUNCTION_ARGS) int64 arg2 = PG_GETARG_INT64(1); if (arg2 == 0) + { ereport(ERROR, (errcode(ERRCODE_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 */ PG_RETURN_INT64(arg1 % arg2); @@ -815,9 +824,13 @@ int84div(PG_FUNCTION_ARGS) int64 result; if (arg2 == 0) + { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); + /* ensure compiler realizes we mustn't reach the division (gcc bug) */ + PG_RETURN_NULL(); + } result = arg1 / arg2; @@ -999,9 +1012,13 @@ int82div(PG_FUNCTION_ARGS) int64 result; if (arg2 == 0) + { ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); + /* ensure compiler realizes we mustn't reach the division (gcc bug) */ + PG_RETURN_NULL(); + } result = arg1 / arg2; [parent: 2f418e8a1741]