summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--ext/standard/file.c10
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))));