@@ -1155,6 +1155,7 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c
1155
1155
*/
1156
1156
}
1157
1157
/* Overflow ? */
1158
+ #if 0
1158
1159
if (set -> row_count ) {
1159
1160
/* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */
1160
1161
if (set -> row_count * meta -> field_count * sizeof (zval * ) > SIZE_MAX ) {
@@ -1171,7 +1172,7 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c
1171
1172
}
1172
1173
memset (set -> data , 0 , (size_t )(set -> row_count * meta -> field_count * sizeof (zval * )));
1173
1174
}
1174
-
1175
+ #endif
1175
1176
MYSQLND_INC_CONN_STATISTIC_W_VALUE (conn -> stats ,
1176
1177
binary_protocol ? STAT_ROWS_BUFFERED_FROM_CLIENT_PS :
1177
1178
STAT_ROWS_BUFFERED_FROM_CLIENT_NORMAL ,
@@ -1203,9 +1204,6 @@ MYSQLND_METHOD(mysqlnd_res, store_result_fetch_data)(MYSQLND_CONN_DATA * const c
1203
1204
if (ret == FAIL ) {
1204
1205
COPY_CLIENT_ERROR (set -> error_info , row_packet -> error_info );
1205
1206
} else {
1206
- /* Position at the first row */
1207
- set -> data_cursor = set -> data ;
1208
-
1209
1207
/* libmysql's documentation says it should be so for SELECT statements */
1210
1208
conn -> upsert_status -> affected_rows = set -> row_count ;
1211
1209
}
@@ -1255,7 +1253,27 @@ MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result,
1255
1253
SET_OOM_ERROR (* conn -> error_info );
1256
1254
}
1257
1255
DBG_RETURN (NULL );
1256
+ } else {
1257
+ /* Overflow ? */
1258
+ MYSQLND_RES_BUFFERED * set = result -> stored_data ;
1259
+ if (set -> row_count ) {
1260
+ /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */
1261
+ if (set -> row_count * result -> meta -> field_count * sizeof (zval * ) > SIZE_MAX ) {
1262
+ SET_OOM_ERROR (* conn -> error_info );
1263
+ DBG_RETURN (NULL );
1264
+ }
1265
+ /* if pecalloc is used valgrind barks gcc version 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036] (SUSE Linux) */
1266
+ set -> data = mnd_emalloc ((size_t )(set -> row_count * result -> meta -> field_count * sizeof (zval * )));
1267
+ if (!set -> data ) {
1268
+ SET_OOM_ERROR (* conn -> error_info );
1269
+ DBG_RETURN (NULL );
1270
+ }
1271
+ memset (set -> data , 0 , (size_t )(set -> row_count * result -> meta -> field_count * sizeof (zval * )));
1272
+ }
1273
+ /* Position at the first row */
1274
+ set -> data_cursor = set -> data ;
1258
1275
}
1276
+
1259
1277
/* libmysql's documentation says it should be so for SELECT statements */
1260
1278
conn -> upsert_status -> affected_rows = result -> stored_data -> row_count ;
1261
1279
0 commit comments