@@ -110,7 +110,7 @@ sqlda_common_total_size(const PGresult *res, int row, enum COMPAT_MODE compat, l
110
110
* int Unfortunately we need to do double work here to compute
111
111
* the size of the space needed for the numeric structure.
112
112
*/
113
- ecpg_sqlda_align_add_size (offset , sizeof (int ), sizeof (numeric ), & offset , & next_offset );
113
+ ecpg_sqlda_align_add_size (offset , sizeof (NumericDigit * ), sizeof (numeric ), & offset , & next_offset );
114
114
if (!PQgetisnull (res , row , i ))
115
115
{
116
116
char * val = PQgetvalue (res , row , i );
@@ -119,7 +119,8 @@ sqlda_common_total_size(const PGresult *res, int row, enum COMPAT_MODE compat, l
119
119
num = PGTYPESnumeric_from_asc (val , NULL );
120
120
if (!num )
121
121
break ;
122
- ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
122
+ if (num -> ndigits )
123
+ ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
123
124
PGTYPESnumeric_free (num );
124
125
}
125
126
break ;
@@ -323,7 +324,7 @@ ecpg_set_compat_sqlda(int lineno, struct sqlda_compat ** _sqlda, const PGresult
323
324
324
325
set_data = false;
325
326
326
- ecpg_sqlda_align_add_size (offset , sizeof (int ), sizeof (numeric ), & offset , & next_offset );
327
+ ecpg_sqlda_align_add_size (offset , sizeof (NumericDigit * ), sizeof (numeric ), & offset , & next_offset );
327
328
sqlda -> sqlvar [i ].sqldata = (char * ) sqlda + offset ;
328
329
sqlda -> sqlvar [i ].sqllen = sizeof (numeric );
329
330
@@ -343,11 +344,14 @@ ecpg_set_compat_sqlda(int lineno, struct sqlda_compat ** _sqlda, const PGresult
343
344
344
345
memcpy (sqlda -> sqlvar [i ].sqldata , num , sizeof (numeric ));
345
346
346
- ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
347
- memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
347
+ if (num -> ndigits )
348
+ {
349
+ ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
350
+ memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
348
351
349
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
350
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
352
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
353
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
354
+ }
351
355
352
356
PGTYPESnumeric_free (num );
353
357
@@ -509,7 +513,7 @@ ecpg_set_native_sqlda(int lineno, struct sqlda_struct ** _sqlda, const PGresult
509
513
510
514
set_data = false;
511
515
512
- ecpg_sqlda_align_add_size (offset , sizeof (int ), sizeof (numeric ), & offset , & next_offset );
516
+ ecpg_sqlda_align_add_size (offset , sizeof (NumericDigit * ), sizeof (numeric ), & offset , & next_offset );
513
517
sqlda -> sqlvar [i ].sqldata = (char * ) sqlda + offset ;
514
518
sqlda -> sqlvar [i ].sqllen = sizeof (numeric );
515
519
@@ -529,11 +533,14 @@ ecpg_set_native_sqlda(int lineno, struct sqlda_struct ** _sqlda, const PGresult
529
533
530
534
memcpy (sqlda -> sqlvar [i ].sqldata , num , sizeof (numeric ));
531
535
532
- ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
533
- memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
536
+ if (num -> ndigits )
537
+ {
538
+ ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
539
+ memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
534
540
535
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
536
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
541
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
542
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
543
+ }
537
544
538
545
PGTYPESnumeric_free (num );
539
546
0 commit comments