From 753529325ec332e762bbfe4bbc1d2b2b88351e9c Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Tue, 15 Apr 2008 15:48:20 +0000 Subject: [PATCH] MFB: Fixed bug #44034 (FILE_IGNORE_NEW_LINES in file() does not work as expected when lines end in \r\n) --- NEWS | 2 ++ ext/standard/file.c | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 0ee8a8b602..5130a49569 100644 --- a/NEWS +++ b/NEWS @@ -158,6 +158,8 @@ PHP NEWS (Derick, iuri dot fiedoruk at hp dot com). - Fixed bug #44214 (Crash using preg_replace_callback() and global variable). (Nuno, Scott) +- Fixed bug #44034 (FILE_IGNORE_NEW_LINES in file() does not work as expected + when lines end in \r\n). (Ilia) - Fixed bug #43960 (strtotime() returns timestamp in the future when given a bogus string). (Derick) - Fixed bug #43832 (mysqli_get_charset() doesn't expose charset comment). diff --git a/ext/standard/file.c b/ext/standard/file.c index 38d2a1e34f..5a782d6da6 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -775,16 +775,20 @@ parse_eol: } while ((p = memchr(p, eol_marker, (e-p)))); } else { do { - if (skip_blank_lines && !(p-s)) { + int windows_eol = 0; + if (eol_marker == '\n' && *(p - 1) == '\r') { + windows_eol++; + } + if (skip_blank_lines && !(p-s-windows_eol)) { s = ++p; continue; } if (PG(magic_quotes_runtime)) { /* s is in target_buf which is freed at the end of the function */ - slashed = php_addslashes(s, (p-s), &len, 0 TSRMLS_CC); + slashed = php_addslashes(s, (p-s-windows_eol), &len, 0 TSRMLS_CC); add_index_stringl(return_value, i++, slashed, len, 0); } else { - add_index_stringl(return_value, i++, estrndup(s, p-s), p-s, 0); + add_index_stringl(return_value, i++, estrndup(s, p-s-windows_eol), p-s-windows_eol, 0); } s = ++p; } while ((p = memchr(p, eol_marker, (e-p)))); -- 2.40.0