ID:               30439
 Comment by:       sirbinam at hotmail dot com
 Reported By:      dmp-php at dplhenterprises dot com
 Status:           Open
 Bug Type:         FTP related
 Operating System: Windows 2000
 PHP Version:      4.3.9
 New Comment:

I submitted a patch to the internals list in response to bug# 27633,
that *may* fix this problem. I found 2 problems, one, *some* servers
send a '\r' before every '\n', so if the source file has '\r\n' style
line endings the buffer on the client side contains '\r\r\n' and the
code didn't handle this. Secondly, I noticed in my testing of the
original code that if the data in the buffer ended with a line ending
that the pointer would be moved past the end of the data, and write
garbage data to the stream, there were a bunch of null characters, and
data from other processes. This would only apply to win32 systems doing
transfers in ascii mode.


Previous Comments:
------------------------------------------------------------------------

[2004-12-10 18:21:18] a dot j dot baas at students dot uu dot nl

I have tested this also, but on a linux machine, i think working with
proftpd.
For me, i stumbled uppon this issue when downloading small files with a
huge amount of linebrakes.
the issue should be rated high, because i get what looks like a dump of
the php memory, including some source code of other sites that run on
the server. I could easily exploit this to retreive database passwords
etc.
it also causes the script that does the downloading to crash without
outputting anything to the browser. If you need additional testcases(i
still have the txt file that causes the crash) please let me know.

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

[2004-11-29 12:15:57] mailbox2 at ibelgique dot com

Hi,

Here is a test script. When fixing this bug, please also look at bug
27633 which may be related.

Thanks!

David


<?php

// Test script for PHP bugs 27633 and 30439

        $ftpserver  = "ftp.belnet.be";
        $username   = "anonymous";
        $password   = "[EMAIL PROTECTED]";
        $localfile  = dirname(__FILE__) . "/test-ftp-output.txt"; // Chmod 777
if necessary
        $remotefile = "/mirror/ftp.php.net/index.php";
        $ftpmode    = FTP_ASCII; // without quotes

        echo "<html>--- Script start ---<br />\n";

        $conn_id = ftp_connect($ftpserver);
        if ($conn_id == false) { echo "Could not connect to FTP server
$ftpserver.<br />\n"; exit(); }

        $result_login = ftp_login($conn_id, $username, $password);      
        if ($result_login == false) { echo "Could not login to FTP server
$ftpserver.<br />\n"; exit(); }

        $result_get = ftp_get($conn_id, $localfile, $remotefile, $ftpmode);
        if ($result_get == false) { echo "Could not get the remote file
$remotefile to the local file $localfile.<br />\n"; exit(); }
        
        ftp_close($conn_id);

        echo "--- Script end ---<br /></html>\n";
?>

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

[2004-11-27 16:58:50] [EMAIL PROTECTED]

Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc.

If possible, make the script source available online and provide
an URL to it here. Try avoid embedding huge scripts into the report.



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

[2004-10-15 01:46:56] dmp-php at dplhenterprises dot com

Description:
------------
When using ftp_get() or ftp_fget() in FTP_ASCII mode and fetching from
an OpenVMS server runing the UCX FTP server (version appears
irrelevant), extra characters are added to the end of the file.
It appears to be the end of the last complete buffer when the final
read doesn't completely fill the buffer at end of file. 
This does not happen with an IIS FTP server. I have been unable to test
with a *nix server.
I've tried fetching the file with both WS_FTP and the standard Windows
FTP client and neither of them produced corrupt files.

Reproduce code:
---------------
<?php
  $wipfil = 'd:/bcs_mps/_wip/ftpbug.txt';
  $srcfil = 'work$:[mps.r]006.mps';

  $f = ftp_connect( 'bcsaxp.bcs.com' );
  if( !$f )
    die( "Unable to connect to bcsaxp.bcs.com. " 
         . $php_errormsg );

  if( !ftp_login( $f, 'myusername', 'mypass' ))
  {
    $this->close();
    die( "Unable to log in to bcsaxp.bcs.com as " 
         . "myusername " . $php_errormsg );
  }

  if( !ftp_get( $f, $wipfil, $srcfil, FTP_ASCII )) 
    die( "Unable to GET file {$srcfil} " . $php_errormsg );
        
  ftp_close( $f );
?>


Expected result:
----------------
<!-- Test MPS request file -->
<bcs_mps_email>
  <message>
    <to address="[EMAIL PROTECTED]" name="Dave testing throug
daveandlaura" />
    <from address="[EMAIL PROTECTED]" name="MPS Test
script" />
    <subject>Another test message for MPS</subject>
    <body type="text">
This is the plain text version of this message.
It contains a tabbed table.
Column 1        Column 2
L1-C1   L1-C2
L2-C1   L2-C2      
    </body>
    <body type="html">
      <![CDATA[
        <h3 style="text-align: center; color: blue;">This is the HTML version
of this message</h3>
        It contains an HTML table.
        <table border=1>
          <tr><th>Column 1</th><th>Column 2</th></tr>
          <tr><td>L1-C1</td><td>L1-C2</td></tr>
          <tr><td>L2-C1</td><td>L2-C2</td></tr>
        </table>
      ]]>
    </body>
    <attachment file="sys$login:login.com" type="text/plain"
name="Login.Dcl" />
  </message>
<bcs_mps_email>


Actual result:
--------------
<!-- Test MPS request file -->
<bcs_mps_email>
  <message>
    <to address="[EMAIL PROTECTED]" name="Dave testing throug
daveandlaura" />
    <from address="[EMAIL PROTECTED]" name="MPS Test
script" />
    <subject>Another test message for MPS</subject>
    <body type="text">
This is the plain text version of this message.
It contains a tabbed table.
Column 1        Column 2
L1-C1   L1-C2
L2-C1   L2-C2      
    </body>
    <body type="html">
      <![CDATA[
        <h3 style="text-align: center; color: blue;">This is the HTML version
of this message</h3>
        It contains an HTML table.
        <table border=1>
          <tr><th>Column 1</th><th>Column 2</th></tr>
          <tr><td>L1-C1</td><td>L1-C2</td></tr>
          <tr><td>L2-C1</td><td>L2-C2</td></tr>
        </table>
      ]]>
    </body>
    <attachment file="sys$login:login.com" type="text/plain"
name="Login.Dcl" />
  </message>
<bcs_mps_email>
n 2
L1-C1   L1-C2
L2-C1   L2-C2      
    </body>
    <body type="html">
      <![CDATA[



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


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

Reply via email to