Skip to content

Commit 3e7a8e0

Browse files
committed
Fix for #26589. Crash when selecting many columns of type Money
1 parent d45b2c6 commit 3e7a8e0

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

ext/mssql/php_mssql.c

+19-2
Original file line numberDiff line numberDiff line change
@@ -797,9 +797,12 @@ static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int off
797797
ZVAL_STRINGL(result, data, length, 1);
798798
break;
799799
}
800+
case SQLMONEY4:
800801
case SQLFLT4:
801802
ZVAL_DOUBLE(result, (double) floatcol4(offset));
802803
break;
804+
case SQLMONEY:
805+
case SQLMONEYN:
803806
case SQLFLT8:
804807
ZVAL_DOUBLE(result, (double) floatcol8(offset));
805808
break;
@@ -891,8 +894,19 @@ static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int
891894

892895
if ((column_type != SQLDATETIME && column_type != SQLDATETIM4) || MS_SQL_G(datetimeconvert)) {
893896

894-
if (column_type == SQLDATETIM4) res_length += 14;
895-
if (column_type == SQLDATETIME) res_length += 10;
897+
switch (column_type) {
898+
case SQLDATETIM4 :
899+
res_length += 14;
900+
break;
901+
case SQLDATETIME :
902+
res_length += 10;
903+
break;
904+
case SQLMONEY :
905+
case SQLMONEY4 :
906+
case SQLMONEYN :
907+
res_length += 5;
908+
break;
909+
}
896910

897911
res_buf = (unsigned char *) emalloc(res_length+1);
898912
res_length = dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR, res_buf, -1);
@@ -947,6 +961,9 @@ static void _mssql_get_sp_result(mssql_link *mssql_ptr, mssql_statement *stateme
947961
case SQLFLT4:
948962
case SQLFLT8:
949963
case SQLFLTN:
964+
case SQLMONEY4:
965+
case SQLMONEY:
966+
case SQLMONEYN:
950967
convert_to_double_ex(&bind->zval);
951968
Z_DVAL_P(bind->zval) = *((double *)(dbretdata(mssql_ptr->link,i)));
952969
break;

0 commit comments

Comments
 (0)