File tree 2 files changed +18
-4
lines changed
2 files changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -1679,6 +1679,10 @@ Mon Oct 6 08:41:45 CEST 2003
1679
1679
Tue Oct 7 07:45:09 CEST 2003
1680
1680
1681
1681
- Fixed error handling in rstrdate.
1682
+
1683
+ Tue Oct 7 20:26:06 CEST 2003
1684
+
1685
+ - Fixed floating point exception in long=>numeric transformation.
1682
1686
- Set ecpg version to 3.0.0
1683
1687
- Set ecpg library to 4.0.0
1684
1688
- Set pgtypes library to 1.0.0
Original file line number Diff line number Diff line change @@ -1338,6 +1338,7 @@ PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
1338
1338
signed long int extract ;
1339
1339
signed long int reach_limit ;
1340
1340
1341
+ printf ("l=%ld\n" , long_val );
1341
1342
if (abs_long_val < 0 )
1342
1343
{
1343
1344
abs_long_val *= -1 ;
@@ -1351,10 +1352,19 @@ PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
1351
1352
{
1352
1353
size ++ ;
1353
1354
reach_limit *= 10 ;
1354
- } while ((reach_limit - 1 ) < abs_long_val );
1355
+ } while ((reach_limit - 1 ) < abs_long_val && reach_limit <= LONG_MAX / 10 );
1355
1356
1356
- /* always add a .0 */
1357
- size ++ ;
1357
+ if (reach_limit <= LONG_MAX /10 )
1358
+ {
1359
+ /* add the first digit and a .0 */
1360
+ size += 2 ;
1361
+ }
1362
+ else
1363
+ {
1364
+ /* always add a .0 */
1365
+ size ++ ;
1366
+ reach_limit /= 10 ;
1367
+ }
1358
1368
1359
1369
if (alloc_var (var , size ) < 0 )
1360
1370
return -1 ;
@@ -1366,11 +1376,11 @@ PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
1366
1376
i = 0 ;
1367
1377
do
1368
1378
{
1369
- reach_limit /= 10 ;
1370
1379
extract = abs_long_val - (abs_long_val % reach_limit );
1371
1380
var -> digits [i ] = extract / reach_limit ;
1372
1381
abs_long_val -= extract ;
1373
1382
i ++ ;
1383
+ reach_limit /= 10 ;
1374
1384
1375
1385
/*
1376
1386
* we can abandon if abs_long_val reaches 0, because the memory is
You can’t perform that action at this time.
0 commit comments