thekid Wed, 16 Jun 2010 09:53:51 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=300492
Log: - MFT: Fixed segmentation fault when reading rows # Problem surfaces when using FreeTDS, ASE 12.5 and reading text fields # with NULL values. This is essentially a workaround for a bug in Free- # TDS which is not setting the NULL indicators correctly, but provides # a protection against possible segfaults if any other driver ever does # this again:-) Changed paths: U php/php-src/branches/PHP_5_2/ext/sybase_ct/php_sybase_ct.c Modified: php/php-src/branches/PHP_5_2/ext/sybase_ct/php_sybase_ct.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/sybase_ct/php_sybase_ct.c 2010-06-16 09:49:25 UTC (rev 300491) +++ php/php-src/branches/PHP_5_2/ext/sybase_ct/php_sybase_ct.c 2010-06-16 09:53:51 UTC (rev 300492) @@ -1204,8 +1204,17 @@ } default: { - /* This indicates anything else, return it as string */ - ZVAL_STRINGL(&result->data[i][j], result->tmp_buffer[j], result->lengths[j]- 1, 1); + /* This indicates anything else, return it as string + * FreeTDS doesn't correctly set result->indicators[j] correctly + * for NULL fields in some version in conjunction with ASE 12.5 + * but instead sets result->lengths[j] to 0, which would lead to + * a negative memory allocation (and thus a segfault). + */ + if (result->lengths[j] < 1) { + ZVAL_NULL(&result->data[i][j]); + } else { + ZVAL_STRINGL(&result->data[i][j], result->tmp_buffer[j], result->lengths[j]- 1, 1); + } break; } }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php