} while ((p = u_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;
}
- add_index_unicodel(return_value, i++, eustrndup(s, p-s), p-s, 0);
+ add_index_unicodel(return_value, i++, eustrndup(s, p-s-windows_eol), p-s-windows_eol, 0);
s = ++p;
} while ((p = u_memchr(p, eol_marker, (e-p))));
}
} while ((p = memchr(p, eol_marker, (e-p))));
} else {
do {
- if (skip_blank_lines && !(p-s)) {
+ int windows_eol = 0;
+ if (p != target_buf && eol_marker == '\n' && *(p - 1) == '\r') {
+ windows_eol++;
+ }
+ if (skip_blank_lines && !(p-s-windows_eol)) {
s = ++p;
continue;
}
- 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))));
}
--- /dev/null
+--TEST--
+Bug #44034
+--FILE--
+<?php
+
+$urls = array();
+$urls[] = "data://text/plain,foo\r\nbar\r\n";
+$urls[] = "data://text/plain,\r\nfoo\r\nbar\r\n";
+$urls[] = "data://text/plain,foo\r\nbar";
+
+foreach($urls as $url) {
+ echo strtr($url, array("\r" => "\\r", "\n" => "\\n")) . "\n";
+ var_dump(file($url, FILE_IGNORE_NEW_LINES|FILE_TEXT));
+}
+?>
+--EXPECTF--
+data://text/plain,foo\r\nbar\r\n
+array(2) {
+ [0]=>
+ %unicode|string%(3) "foo"
+ [1]=>
+ %unicode|string%(3) "bar"
+}
+data://text/plain,\r\nfoo\r\nbar\r\n
+array(3) {
+ [0]=>
+ %unicode|string%(0) ""
+ [1]=>
+ %unicode|string%(3) "foo"
+ [2]=>
+ %unicode|string%(3) "bar"
+}
+data://text/plain,foo\r\nbar
+array(2) {
+ [0]=>
+ %unicode|string%(3) "foo"
+ [1]=>
+ %unicode|string%(3) "bar"
+}