andrey Tue, 05 Oct 2010 16:54:14 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=304113
Log: Fix compiler warnings - on 32bit size_t is smaller than uint64_t, although we will never hit this the compiler should be happy. 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-10-05 16:27:49 UTC (rev 304112) +++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c 2010-10-05 16:54:14 UTC (rev 304113) @@ -1147,7 +1147,7 @@ goto end; } if (free_rows) { - set->row_buffers = mnd_pemalloc(free_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *), to_cache); + set->row_buffers = mnd_pemalloc((size_t)(free_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *)), to_cache); if (!set->row_buffers) { SET_OOM_ERROR(conn->error_info); ret = FAIL; @@ -1181,8 +1181,15 @@ uint64_t total_allocated_rows = free_rows = next_extend = next_extend * 11 / 10; /* extend with 10% */ MYSQLND_MEMORY_POOL_CHUNK ** new_row_buffers; total_allocated_rows += set->row_count; + + /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */ + if (total_allocated_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *) > SIZE_MAX) { + SET_OOM_ERROR(conn->error_info); + ret = FAIL; + goto end; + } new_row_buffers = mnd_perealloc(set->row_buffers, - total_allocated_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *), + (size_t)(total_allocated_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *)), set->persistent); if (!new_row_buffers) { SET_OOM_ERROR(conn->error_info); @@ -1209,8 +1216,14 @@ } /* Overflow ? */ if (set->row_count) { + /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */ + if (set->row_count * meta->field_count * sizeof(zval *) > SIZE_MAX) { + SET_OOM_ERROR(conn->error_info); + ret = FAIL; + goto end; + } /* if pecalloc is used valgrind barks gcc version 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036] (SUSE Linux) */ - set->data = mnd_pemalloc(set->row_count * meta->field_count * sizeof(zval *), to_cache); + set->data = mnd_pemalloc((size_t)(set->row_count * meta->field_count * sizeof(zval *)), to_cache); if (!set->data) { SET_OOM_ERROR(conn->error_info); ret = FAIL; @@ -1231,8 +1244,14 @@ } /* save some memory */ if (free_rows) { + /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */ + if (set->row_count * sizeof(MYSQLND_MEMORY_POOL_CHUNK *) > SIZE_MAX) { + SET_OOM_ERROR(conn->error_info); + ret = FAIL; + goto end; + } set->row_buffers = mnd_perealloc(set->row_buffers, - set->row_count * sizeof(MYSQLND_MEMORY_POOL_CHUNK *), + (size_t) (set->row_count * sizeof(MYSQLND_MEMORY_POOL_CHUNK *)), set->persistent); } @@ -1593,7 +1612,8 @@ DBG_VOID_RETURN; } - mysqlnd_array_init(return_value, (unsigned int) set? set->row_count : 4); /* 4 is a magic value */ + /* 4 is a magic value. The cast is safe, if larger then the array will be later extended - no big deal :) */ + mysqlnd_array_init(return_value, (unsigned int) set? (uint) set->row_count : 4); do { MAKE_STD_ZVAL(row); Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c 2010-10-05 16:27:49 UTC (rev 304112) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c 2010-10-05 16:54:14 UTC (rev 304113) @@ -1147,7 +1147,7 @@ goto end; } if (free_rows) { - set->row_buffers = mnd_pemalloc(free_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *), to_cache); + set->row_buffers = mnd_pemalloc((size_t)(free_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *)), to_cache); if (!set->row_buffers) { SET_OOM_ERROR(conn->error_info); ret = FAIL; @@ -1181,8 +1181,15 @@ uint64_t total_allocated_rows = free_rows = next_extend = next_extend * 11 / 10; /* extend with 10% */ MYSQLND_MEMORY_POOL_CHUNK ** new_row_buffers; total_allocated_rows += set->row_count; + + /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */ + if (total_allocated_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *) > SIZE_MAX) { + SET_OOM_ERROR(conn->error_info); + ret = FAIL; + goto end; + } new_row_buffers = mnd_perealloc(set->row_buffers, - total_allocated_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *), + (size_t)(total_allocated_rows * sizeof(MYSQLND_MEMORY_POOL_CHUNK *)), set->persistent); if (!new_row_buffers) { SET_OOM_ERROR(conn->error_info); @@ -1209,8 +1216,14 @@ } /* Overflow ? */ if (set->row_count) { + /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */ + if (set->row_count * meta->field_count * sizeof(zval *) > SIZE_MAX) { + SET_OOM_ERROR(conn->error_info); + ret = FAIL; + goto end; + } /* if pecalloc is used valgrind barks gcc version 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036] (SUSE Linux) */ - set->data = mnd_pemalloc(set->row_count * meta->field_count * sizeof(zval *), to_cache); + set->data = mnd_pemalloc((size_t)(set->row_count * meta->field_count * sizeof(zval *)), to_cache); if (!set->data) { SET_OOM_ERROR(conn->error_info); ret = FAIL; @@ -1231,8 +1244,14 @@ } /* save some memory */ if (free_rows) { + /* don't try to allocate more than possible - mnd_XXalloc expects size_t, and it can have narrower range than uint64_t */ + if (set->row_count * sizeof(MYSQLND_MEMORY_POOL_CHUNK *) > SIZE_MAX) { + SET_OOM_ERROR(conn->error_info); + ret = FAIL; + goto end; + } set->row_buffers = mnd_perealloc(set->row_buffers, - set->row_count * sizeof(MYSQLND_MEMORY_POOL_CHUNK *), + (size_t) (set->row_count * sizeof(MYSQLND_MEMORY_POOL_CHUNK *)), set->persistent); } @@ -1590,7 +1609,8 @@ DBG_VOID_RETURN; } - mysqlnd_array_init(return_value, (unsigned int) set? set->row_count : 4); /* 4 is a magic value */ + /* 4 is a magic value. The cast is safe, if larger then the array will be later extended - no big deal :) */ + mysqlnd_array_init(return_value, (unsigned int) set? (uint) set->row_count : 4); do { MAKE_STD_ZVAL(row);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php