felipe Wed Feb 6 02:56:49 2008 UTC
Modified files:
/php-src/ext/standard file.c
Log:
Fixed bug #42167 (fgetcsv gives different output on php6 compared to php5),
#42219 (length argument of fgetcsv() is not effective/working in PHP6)
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/file.c?r1=1.506&r2=1.507&diff_format=u
Index: php-src/ext/standard/file.c
diff -u php-src/ext/standard/file.c:1.506 php-src/ext/standard/file.c:1.507
--- php-src/ext/standard/file.c:1.506 Mon Feb 4 19:48:14 2008
+++ php-src/ext/standard/file.c Wed Feb 6 02:56:49 2008
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.506 2008/02/04 19:48:14 felipe Exp $ */
+/* $Id: file.c,v 1.507 2008/02/06 02:56:49 felipe Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -2158,7 +2158,7 @@
}
if (stream->readbuf_type == IS_STRING) {
- /* Binary mode stream needs binary delmiter/enclosure */
+ /* Binary mode stream needs binary delimiter/enclosure */
if (delimiter_type == IS_UNICODE) {
if (FAILURE ==
zend_unicode_to_string(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &delimiter,
&delimiter_len, (UChar*)delimiter, delimiter_len TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Failed converting delimiter from unicode");
@@ -2211,7 +2211,17 @@
}
}
- buf.v = php_stream_get_line_ex(stream, stream->readbuf_type, NULL_ZSTR,
0, (len < 0) ? 0 : len, &buf_len);
+ if (len < 0) {
+ buf.v = php_stream_get_line_ex(stream, stream->readbuf_type,
NULL_ZSTR, 0, 0, &buf_len);
+ } else {
+ buf.v = stream->readbuf_type == IS_UNICODE ? emalloc(UBYTES(len
+ 1)) : emalloc(len + 1);
+ if (php_stream_get_line_ex(stream, stream->readbuf_type, buf,
len + 1, len + 1, &buf_len) == NULL) {
+ efree(buf.v);
+ RETVAL_FALSE;
+ goto cleanup;
+ }
+ }
+
if (!buf.v) {
/* No data */
RETVAL_FALSE;
@@ -2473,7 +2483,7 @@
case PHP_FGETCSV_FIELD_NO_ENC:
/* Check for escapes */
- if (PHP_FGETCSV_BIN_CHECK(p, e, escape,
escape_len)) {
+ if (!PHP_FGETCSV_BIN_CHECK(p, e, delimiter,
delimiter_len) && PHP_FGETCSV_BIN_CHECK(p, e, escape, escape_len)) {
p += escape_len + 1;
}
@@ -2682,7 +2692,7 @@
case PHP_FGETCSV_FIELD_NO_ENC:
/* Check for escapes */
- if (PHP_FGETCSV_UNI_CHECK(p, e, escape,
escape_len)) {
+ if (!PHP_FGETCSV_UNI_CHECK(p, e, delimiter,
delimiter_len) && PHP_FGETCSV_UNI_CHECK(p, e, escape, escape_len)) {
p += escape_len + 1;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php