Index: plexus-archiver/src/test/java/org/codehaus/plexus/archiver/jar/ManifestTest.java
===================================================================
--- plexus-archiver.orig/src/test/java/org/codehaus/plexus/archiver/jar/ManifestTest.java	2006-04-12 19:11:38.000000000 +0200
+++ plexus-archiver/src/test/java/org/codehaus/plexus/archiver/jar/ManifestTest.java	2006-04-13 12:57:31.000000000 +0200
@@ -139,19 +139,28 @@
                        " 56789 123456789 123456789 123456789 " + Manifest.EOL,
                       writer.toString() );
     }
-    
+
     public void testAttributeMultiLineValue()
         throws Exception
     {
+        internalTestAttributeMultiLineValue( "a\r\nb", "a" + Manifest.EOL + " b");
+        internalTestAttributeMultiLineValue( "a\nb", "a" + Manifest.EOL + " b");
+        internalTestAttributeMultiLineValue( "a\rb", "a" + Manifest.EOL + " b");
+        internalTestAttributeMultiLineValue( "a\nb\r", "a" + Manifest.EOL + " b" + Manifest.EOL + " ");
+        internalTestAttributeMultiLineValue( "a\rb\n", "a" + Manifest.EOL + " b" + Manifest.EOL + " ");
+    }
+
+    private void internalTestAttributeMultiLineValue( String value, String expected )
+        throws Exception
+    {
         StringWriter writer = new StringWriter();
         Manifest.Attribute attr = new Manifest.Attribute();
-        String multiLineValue = "123456789" + Manifest.EOL + "123456789";
         attr.setName( "test" );
-        attr.setValue( multiLineValue );
+        attr.setValue( value );
         attr.write( new PrintWriter( writer ) );
         writer.flush();
-        assertEquals( "should be indented multiline", 
-                      "test: 123456789" + Manifest.EOL + " 123456789" + Manifest.EOL,
+        assertEquals( "should be indented multiline",
+                      "test: " + expected + Manifest.EOL,
                       writer.toString() );
     }
 
Index: plexus-archiver/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java
===================================================================
--- plexus-archiver.orig/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java	2006-04-13 12:14:40.000000000 +0200
+++ plexus-archiver/src/main/java/org/codehaus/plexus/archiver/jar/Manifest.java	2006-04-13 12:53:42.000000000 +0200
@@ -360,19 +360,28 @@
             throws IOException
         {
             String nameValue = name + ": " + value;
-            for( int idx = nameValue.indexOf( '\n' ); idx >=0; idx = nameValue.indexOf( '\n' ) )
+            while ( true )
             {
-                String line;
-                if ( nameValue.charAt( idx - 1) == '\r' ) 
+                int idxCr = nameValue.indexOf( '\r' );
+                int idxLf = nameValue.indexOf( '\n' );
+                if ( idxCr == -1 && idxLf == -1 )
+                {
+                    break;
+                }
+                int idx;
+                int newlineSeparatorLength;
+                if ( idxCr != -1 && ( idxLf == -1 || idxLf > idxCr ) )
                 {
-                    line = nameValue.substring( 0, idx -1 );
+                    idx = idxCr;
+                    newlineSeparatorLength = idxLf == idxCr + 1 ? 2 : 1;
                 }
                 else
                 {
-                    line = nameValue.substring( 0, idx );
+                    idx = idxLf;
+                    newlineSeparatorLength = 1;
                 }
-                writeLine( writer, line );
-                nameValue = " " + nameValue.substring( idx + 1 );
+                writeLine( writer, nameValue.substring( 0, idx ) );
+                nameValue = " " + nameValue.substring( idx + newlineSeparatorLength );
             }
             writeLine( writer, nameValue );
         }

