Improving fix for padding lines in replies starting with digits

git-svn-id: https://svn.apache.org/repos/asf/mina/ftpserver/trunk@920048 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpReply.java b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpReply.java
index d1eab0f..b208875 100644
--- a/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpReply.java
+++ b/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpReply.java
@@ -19,6 +19,7 @@
 
 package org.apache.ftpserver.ftplet;
 
+
 /**
  * FTP reply object.
  *
@@ -87,6 +88,10 @@
     	return code < 400;
     }
     
+    private boolean isDigit(char c) {
+    	return c >= 48 && c <= 57;
+    }
+    
     /*
      * (non-Javadoc)
      * 
@@ -121,7 +126,15 @@
                     sb.append(" ");
                 }
 
-                if(line.length() > 0 && Character.isDigit(line.charAt(0))) {
+                // "If an intermediary line begins with a 3-digit number, the Server
+                // must pad the front  to avoid confusion.
+                if(i > 0 
+                		&& i + 1 < lines.length 
+                		&& line.length() > 2 
+                		&& isDigit(line.charAt(0))
+                		&& isDigit(line.charAt(1))
+                		&& isDigit(line.charAt(2))
+                	) {
                 	sb.append("  ");
                 }
                 sb.append(line);
diff --git a/core/src/test/java/org/apache/ftpserver/impl/DefaultFtpReplyTest.java b/ftplet-api/src/test/java/org/apache/ftpserver/ftplet/DefaultFtpReplyTest.java
similarity index 76%
rename from core/src/test/java/org/apache/ftpserver/impl/DefaultFtpReplyTest.java
rename to ftplet-api/src/test/java/org/apache/ftpserver/ftplet/DefaultFtpReplyTest.java
index f07ddbc..6abd560 100644
--- a/core/src/test/java/org/apache/ftpserver/impl/DefaultFtpReplyTest.java
+++ b/ftplet-api/src/test/java/org/apache/ftpserver/ftplet/DefaultFtpReplyTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.ftpserver.impl;
+package org.apache.ftpserver.ftplet;
 
 import junit.framework.TestCase;
 
@@ -73,10 +73,28 @@
         assertEquals("123-foo\r\n bar\r\n123 baz\r\n", response.toString());
     }
 
-    public void testMultipleLinesToStringNumberFirst() {
+    public void testMultipleLinesToStringThreeNumbers() {
         DefaultFtpReply response = new DefaultFtpReply(123, "foo\n234bar\nbaz");
 
         assertEquals("123-foo\r\n  234bar\r\n123 baz\r\n", response.toString());
     }
 
+    public void testMultipleLinesToStringThreeNumbersOnFirstLine() {
+        DefaultFtpReply response = new DefaultFtpReply(123, "234foo\nbar\nbaz");
+
+        assertEquals("123-234foo\r\nbar\r\n123 baz\r\n", response.toString());
+    }
+
+    public void testMultipleLinesToStringThreeNumbersOnLastLine() {
+        DefaultFtpReply response = new DefaultFtpReply(123, "foo\nbar\n234baz");
+
+        assertEquals("123-foo\r\nbar\r\n123 234baz\r\n", response.toString());
+    }
+
+    public void testMultipleLinesToStringSingleNumberOnLine() {
+        DefaultFtpReply response = new DefaultFtpReply(123, "foo\n2bar\nbaz");
+
+        assertEquals("123-foo\r\n2bar\r\n123 baz\r\n", response.toString());
+    }
+
 }