Bug #67361 [Opn->Csd]: copy() fails on filename with newline

From: Date: Thu, 19 Jun 2014 10:44:29 +0000
Subject: Bug #67361 [Opn->Csd]: copy() fails on filename with newline
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-186253@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67361&edit=1

 ID:                 67361
 User updated by:    tux at krageroby dot no
 Reported by:        tux at krageroby dot no
 Summary:            copy() fails on filename with newline
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            Filesystem function related
 Operating System:   xUbuntu
 PHP Version:        5.5.13
 Block user comment: N
 Private report:     N

 New Comment:

Not a bug, see comments above.


Previous Comments:
------------------------------------------------------------------------
[2014-06-19 10:43:22] tux at krageroby dot no

[not a bug]

You are completely right, seems like it was the zip extraction that converted the windows newlines
to a unix newline, and therefore the filename was changed before the copy command ran with the
original name. I feel embarrassed now, sorry to have been yet another not too good tested bug
report. I will file the bug to the zip extractors instead.

------------------------------------------------------------------------
[2014-06-18 15:02:47] Husman85 at gmail dot com

Typo in "Expected results (if bug)" in the previous post. It should be:

Expected result (if bug):
-------------------------
Array
(
    [0] => .
    [1] => ..
    [2] => filename_with
Newline_character
)

Warning: copy(testdir/filename_with
Newline_character): failed to open stream: No such file or directory in
/home/husman/Desktop/test/php/bug_67361.php on line 20

Array
(
    [0] => .
    [1] => ..
    [2] => filename_with
Newline_character
)

created/copied filename: filename_with\r\nNewline_character

------------------------------------------------------------------------
[2014-06-18 14:59:14] Husman85 at gmail dot com

This is not a bug. See below:

Test script:
--------------
<?php

// Create a directory to work with
mkdir("testdir", 0777);

// Create a file with Windows-style newline in the file name.
file_put_contents("testdir/filename_with\r\nNewline_character", "test 321");

// Read active directory
$files = scandir('testdir');

// print the directories/files
print_r($files);

// Store the file name of the created file
$created_file = $files[2];

// Attempt to copy file:
echo "\n";
copy("testdir/filename_with\r\nNewline_character", "testdir/copytest");
echo "\n";

// Output files in testdir
$files = scandir('testdir');
print_r($files);

// Can we find "\r\n" in the file name?
echo "\n";
$escaped_name = str_replace(array("\r\n"), '\r\n', $created_file);
echo "created/copied filename: ". $escaped_name;
echo "\n";

?>

Expected result (if bug):
-------------------------
Array
(
    [0] => .
    [1] => ..
    [2] => filename_with
Newline_character
)

Warning: copy(testdir/filename_with
Newline_character): failed to open stream: No such file or directory in
/home/husman/Desktop/test/php/bug_67361.php on line 20

Array
(
    [0] => .
    [1] => ..
    [2] => copytest
    [3] => filename_with
Newline_character
)

created/copied filename: filename_with\r\nNewline_character


Actual result:
-------------------------
Array
(
    [0] => .
    [1] => ..
    [2] => filename_with
Newline_character
)

Array
(
    [0] => .
    [1] => ..
    [2] => copytest
    [3] => filename_with
Newline_character
)

created/copied filename: filename_with\r\nNewline_character


Further Comments:
-----------------
Maybe the file name is not being properly encoded when unpacked from the zip file?

------------------------------------------------------------------------
[2014-06-18 08:23:54] tux at krageroby dot no

Yes, this bug occurs when the filename contains a real windows newline in the filename. so, if using
single quotes, the result is file not found. The bug in my case occurs when unpacking files from a
.zip file that has a windows newline in the filename.

------------------------------------------------------------------------
[2014-06-18 01:21:09] husman85 at gmail dot com

The reason why this fails is because you have escape sequences wrapped in double quotes. If you try
the same thing with single quotes, then you will notice this function is working properly. Escape
sequences are parsed in the context of double quotes.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=67361


--
Edit this bug report at https://bugs.php.net/bug.php?id=67361&edit=1


Thread (7 messages)

« previous php.bugs (#186253) next »