You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by dl...@apache.org on 2009/05/27 14:35:11 UTC

svn commit: r779145 - in /mina/ftpserver/trunk/core/src: main/java/org/apache/ftpserver/impl/IODataConnection.java test/java/org/apache/ftpserver/clienttests/StoreTest.java

Author: dlat
Date: Wed May 27 12:35:11 2009
New Revision: 779145

URL: http://svn.apache.org/viewvc?rev=779145&view=rev
Log:
FTPSERVER-306 EOL sequence is lost if the file wasn't correctly transformed to NVT format (this is, the sent new line sequence  is different from \r\n)

Modified:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/StoreTest.java

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java?rev=779145&r1=779144&r2=779145&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java Wed May 27 12:35:11 2009
@@ -270,7 +270,11 @@
                             if(b == '\n') {
                                 // for reads, we should always get \r\n
                                 // so what we do here is to ignore \n bytes 
-                                // and on \r dump the system local line ending
+                                // and on \r dump the system local line ending.
+                                // Some clients won't transform new lines into \r\n so we make sure we don't delete new lines
+                                if (lastByte != '\r'){
+                                    bos.write(EOL);
+                                }
                             } else if(b == '\r') {
                                 bos.write(EOL);
                             } else {

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/StoreTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/StoreTest.java?rev=779145&r1=779144&r2=779145&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/StoreTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/StoreTest.java Wed May 27 12:35:11 2009
@@ -33,10 +33,12 @@
 public class StoreTest extends ClientTestTemplate {
     private static final String EOL = System.getProperty("line.separator");
     private static final String CRLF = "\r\n";
+    private static final String LF = "\n";
 
     
     private static final String TESTDATA = "TESTDATA" + EOL + "line2" + EOL;
     private static final String TESTDATA_CRLF = "TESTDATA" + CRLF + "line2" + CRLF;
+    private static final String TESTDATA_LF = "TESTDATA" + LF + "line2" + LF;
 
     private static final String ENCODING = "UTF-8";
 
@@ -50,6 +52,7 @@
 
     private static byte[] testData = null;
     private static byte[] testDataCrLf = null;
+     private static byte[] testDataLf = null;
 
     private static byte[] doubleTestData = null;
 
@@ -65,6 +68,7 @@
 
         testData = TESTDATA.getBytes(ENCODING);
         testDataCrLf = TESTDATA_CRLF.getBytes(ENCODING);
+        testDataLf = TESTDATA_LF.getBytes(ENCODING);
         doubleTestData = (TESTDATA + TESTDATA).getBytes(ENCODING);
         oneAndAHalfTestData = ("TEST" + TESTDATA).getBytes(ENCODING);
 
@@ -94,6 +98,21 @@
         assertTrue(testFile.exists());
         TestUtil.assertFileEqual(testData, testFile);
     }
+
+      /**
+     * We should always store files with the local line endings (FTPSERVER-184)
+     *
+     */
+    public void testStoreWithLf() throws Exception {
+        File testFile = new File(ROOT_DIR, TEST_FILENAME);
+
+        assertTrue(client.storeFile(TEST_FILENAME, new ByteArrayInputStream(
+                testDataLf)));
+
+        assertTrue(testFile.exists());
+        TestUtil.assertFileEqual(testData, testFile);
+    }
+
     
     public void testStoreWithLeadingSpace() throws Exception {
         File testFile = new File(ROOT_DIR, TEST_FILENAME_WITH_LEADING_SPACE);