Bug #67361 [Com]: copy() fails on filename with newline

From: Date: Wed, 18 Jun 2014 14:59:15 +0000
Subject: Bug #67361 [Com]: copy() fails on filename with newline
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-186238@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
 Comment by:         Husman85 at gmail dot com
 Reported by:        tux at krageroby dot no
 Summary:            copy() fails on filename with newline
 Status:             Open
 Type:               Bug
 Package:            Filesystem function related
 Operating System:   xUbuntu
 PHP Version:        5.5.13
 Block user comment: N
 Private report:     N

 New Comment:

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?


Previous Comments:
------------------------------------------------------------------------
[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.

------------------------------------------------------------------------
[2014-05-30 06:46:49] tux at krageroby dot no

Description:
------------
When trying to use php copy() function on a file with a newline character in the filename, it fails
to open stream.

Test script:
---------------
php -r 'copy("filename_with\r\nNewline_character", "/tmp/copytest");'

Actual result:
--------------
php -r 'copy("filename_with\r\nNewline_character", "/tmp/copytest");'
PHP Warning:  copy(filename_with
Newline_character): failed to open stream: No such file or directory in Command line code on line 1


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



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


Thread (7 messages)

« previous php.bugs (#186238) next »