andrey                                   Mon, 03 May 2010 19:02:48 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=298922

Log:
Handle OOM in mysqlnd_fetch_row_unbuffered_c()

Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c
    U   php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c

Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c   2010-05-03 
18:53:10 UTC (rev 298921)
+++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c   2010-05-03 
19:02:48 UTC (rev 298922)
@@ -646,27 +646,30 @@
                                                                  
result->conn->stats TSRMLS_CC);

                        retrow = mnd_malloc(result->field_count * sizeof(char 
*));
+                       if (retrow) {
+                               for (i = 0; i < field_count; i++, field++, 
zend_hash_key++) {
+                                       zval *data = 
result->unbuf->last_row_data[i];
+                                       unsigned int len;

-                       for (i = 0; i < field_count; i++, field++, 
zend_hash_key++) {
-                               zval *data = result->unbuf->last_row_data[i];
-                               unsigned int len;
+                                       if (Z_TYPE_P(data) != IS_NULL) {
+                                               convert_to_string(data);
+                                               retrow[i] = Z_STRVAL_P(data);
+                                               len = Z_STRLEN_P(data);
+                                       } else {
+                                               retrow[i] = NULL;
+                                               len = 0;
+                                       }

-                               if (Z_TYPE_P(data) != IS_NULL) {
-                                       convert_to_string(data);
-                                       retrow[i] = Z_STRVAL_P(data);
-                                       len = Z_STRLEN_P(data);
-                               } else {
-                                       retrow[i] = NULL;
-                                       len = 0;
-                               }
+                                       if (lengths) {
+                                               lengths[i] = len;
+                                       }

-                               if (lengths) {
-                                       lengths[i] = len;
+                                       if (field->max_length < len) {
+                                               field->max_length = len;
+                                       }
                                }
-
-                               if (field->max_length < len) {
-                                       field->max_length = len;
-                               }
+                       } else {
+                               SET_OOM_ERROR(result->conn->error_info);
                        }
                }
        } else if (ret == FAIL) {

Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c      2010-05-03 18:53:10 UTC 
(rev 298921)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c      2010-05-03 19:02:48 UTC 
(rev 298922)
@@ -646,27 +646,30 @@
                                                                  
result->conn->stats TSRMLS_CC);

                        retrow = mnd_malloc(result->field_count * sizeof(char 
*));
+                       if (retrow) {
+                               for (i = 0; i < field_count; i++, field++, 
zend_hash_key++) {
+                                       zval *data = 
result->unbuf->last_row_data[i];
+                                       unsigned int len;

-                       for (i = 0; i < field_count; i++, field++, 
zend_hash_key++) {
-                               zval *data = result->unbuf->last_row_data[i];
-                               unsigned int len;
+                                       if (Z_TYPE_P(data) != IS_NULL) {
+                                               convert_to_string(data);
+                                               retrow[i] = Z_STRVAL_P(data);
+                                               len = Z_STRLEN_P(data);
+                                       } else {
+                                               retrow[i] = NULL;
+                                               len = 0;
+                                       }

-                               if (Z_TYPE_P(data) != IS_NULL) {
-                                       convert_to_string(data);
-                                       retrow[i] = Z_STRVAL_P(data);
-                                       len = Z_STRLEN_P(data);
-                               } else {
-                                       retrow[i] = NULL;
-                                       len = 0;
-                               }
+                                       if (lengths) {
+                                               lengths[i] = len;
+                                       }

-                               if (lengths) {
-                                       lengths[i] = len;
+                                       if (field->max_length < len) {
+                                               field->max_length = len;
+                                       }
                                }
-
-                               if (field->max_length < len) {
-                                       field->max_length = len;
-                               }
+                       } else {
+                               SET_OOM_ERROR(result->conn->error_info);
                        }
                }
        } else if (ret == FAIL) {

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to