]> granicus.if.org Git - php/commitdiff
MFH Fix for #26589. Crash when selecting many columns of type Money
authorFrank M. Kromann <fmk@php.net>
Fri, 19 Mar 2004 18:47:02 +0000 (18:47 +0000)
committerFrank M. Kromann <fmk@php.net>
Fri, 19 Mar 2004 18:47:02 +0000 (18:47 +0000)
ext/mssql/php_mssql.c

index c03c856d6424e9fa1f5d49a3d074825758a38353..0e964db325062d16e23e4c701e5eb484e6e67ffe 100644 (file)
@@ -796,10 +796,13 @@ static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int off
                        Z_TYPE_P(result) = IS_STRING;
                        break;
                }
+               case SQLMONEY4:
                case SQLFLT4:
                        Z_DVAL_P(result) = (double) floatcol4(offset);
                        Z_TYPE_P(result) = IS_DOUBLE;
                        break;
+               case SQLMONEY:
+               case SQLMONEYN:
                case SQLFLT8:
                        Z_DVAL_P(result) = (double) floatcol8(offset);
                        Z_TYPE_P(result) = IS_DOUBLE;
@@ -898,8 +901,19 @@ static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int
 
                if ((column_type != SQLDATETIME && column_type != SQLDATETIM4) || MS_SQL_G(datetimeconvert)) {
 
-                       if (column_type == SQLDATETIM4) res_length += 14;
-                       if (column_type == SQLDATETIME) res_length += 10;
+                       switch (column_type) {
+                               case SQLDATETIM4 :
+                                       res_length += 14;
+                                       break;
+                               case SQLDATETIME :
+                                       res_length += 10;
+                                       break;
+                               case SQLMONEY :
+                               case SQLMONEY4 :
+                               case SQLMONEYN :
+                                       res_length += 5;
+                                       break;
+                       }
                        
                        res_buf = (unsigned char *) emalloc(res_length+1);
                        res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR, res_buf, -1);
@@ -956,6 +970,9 @@ static void _mssql_get_sp_result(mssql_link *mssql_ptr, mssql_statement *stateme
                                                case SQLFLT4:
                                                case SQLFLT8:
                                                case SQLFLTN:
+                                               case SQLMONEY4:
+                                               case SQLMONEY:
+                                               case SQLMONEYN:
                                                        convert_to_double_ex(&bind->zval);
                                                        Z_DVAL_P(bind->zval) = *((double *)(dbretdata(mssql_ptr->link,i)));
                                                        break;