Changeset: 17cd8c14c3b4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=17cd8c14c3b4 Modified Files: sql/server/sql_atom.c Branch: Jan2014 Log Message:
don't assert but return error on atom_cast (fix bug 3506) diffs (83 lines): diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c --- a/sql/server/sql_atom.c +++ b/sql/server/sql_atom.c @@ -657,21 +657,24 @@ atom_cast(atom *a, sql_subtype *tp) else a->data.val.lval *= mul; } else if (a->data.vtype == TYPE_int) { - assert(div || ((lng) GDK_int_min <= (lng) a->data.val.ival * mul && (lng) a->data.val.ival * mul <= (lng) GDK_int_max)); + if (!div && ((lng) GDK_int_min > (lng) a->data.val.ival * mul || (lng) a->data.val.ival * mul > (lng) GDK_int_max)) + return 0; a->data.val.ival += (int)rnd; if (div) a->data.val.ival /= (int) mul; else a->data.val.ival *= (int) mul; } else if (a->data.vtype == TYPE_sht) { - assert(div || ((lng) GDK_sht_min <= (lng) a->data.val.shval * mul && (lng) a->data.val.shval * mul <= (lng) GDK_sht_max)); + if (!div && ((lng) GDK_sht_min > (lng) a->data.val.shval * mul || (lng) a->data.val.shval * mul > (lng) GDK_sht_max)) + return 0; a->data.val.shval += (sht)rnd; if (div) a->data.val.shval /= (sht) mul; else a->data.val.shval *= (sht) mul; } else if (a->data.vtype == TYPE_bte) { - assert(div || ((lng) GDK_bte_min <= (lng) a->data.val.btval * mul && (lng) a->data.val.btval * mul <= (lng) GDK_bte_max)); + if (!div && ((lng) GDK_bte_min > (lng) a->data.val.btval * mul || (lng) a->data.val.btval * mul > (lng) GDK_bte_max)) + return 0; a->data.val.btval += (bte)rnd; if (div) a->data.val.btval /= (bte) mul; @@ -711,13 +714,16 @@ atom_cast(atom *a, sql_subtype *tp) if (a->data.vtype == TYPE_lng) { a->data.val.lval = (int) val; } else if (a->data.vtype == TYPE_int) { - assert( ((lng) GDK_int_min <= val && val <= (lng) GDK_int_max)); + if ( ((lng) GDK_int_min > val || val > (lng) GDK_int_max)) + return 0; a->data.val.ival = (int) val; } else if (a->data.vtype == TYPE_sht) { - assert( ((lng) GDK_sht_min <= val && val <= (lng) GDK_sht_max)); + if ( ((lng) GDK_sht_min > val || val > (lng) GDK_sht_max)) + return 0; a->data.val.shval = (int) val; } else if (a->data.vtype == TYPE_bte) { - assert( ((lng) GDK_bte_min <= val && val <= (lng) GDK_bte_max)); + if ( ((lng) GDK_bte_min > val || val > (lng) GDK_bte_max)) + return 0; a->data.val.btval = (int) val; } return 1; @@ -779,15 +785,18 @@ atom_cast(atom *a, sql_subtype *tp) if (a->data.vtype == TYPE_lng) a->data.val.lval *= mul; else if (a->data.vtype == TYPE_int) { - assert((lng) GDK_int_min <= (lng) a->data.val.ival * mul && (lng) a->data.val.ival * mul <= (lng) GDK_int_max); + if ((lng) GDK_int_min > (lng) a->data.val.ival * mul || (lng) a->data.val.ival * mul > (lng) GDK_int_max) + return 0; a->data.val.ival *= (int) mul; } else if (a->data.vtype == TYPE_sht) { - assert((lng) GDK_sht_min <= (lng) a->data.val.shval * mul && (lng) a->data.val.shval * mul <= (lng) GDK_sht_max); + if ((lng) GDK_sht_min > (lng) a->data.val.shval * mul || (lng) a->data.val.shval * mul > (lng) GDK_sht_max) + return 0; a->data.val.shval *= (sht) mul; } else if (a->data.vtype == TYPE_bte) { - assert((lng) GDK_bte_min <= (lng) a->data.val.btval * mul && (lng) a->data.val.btval * mul <= (lng) GDK_bte_max); + if ((lng) GDK_bte_min > (lng) a->data.val.btval * mul || (lng) a->data.val.btval * mul > (lng) GDK_bte_max) + return 0; a->data.val.btval *= (bte) mul; } return 1; @@ -827,7 +836,8 @@ atom_cast(atom *a, sql_subtype *tp) if (tp->type->localtype == TYPE_dbl) a->data.val.dval = a->d; else { - assert((dbl) GDK_flt_min <= a->d && a->d <= (dbl) GDK_flt_max); + if ((dbl) GDK_flt_min > a->d || a->d > (dbl) GDK_flt_max) + return 0; a->data.val.fval = (flt) a->d; } a->tpe = *tp; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list