Ticket #274 (new defect)

Opened 5 months ago

Symlink containing Target with space breaks MLST unserialize

Reported by: raw Owned by: zubov
Priority: normal Milestone: 2.0.x-plus
Component: VirtualFileSystem Version: plus-2.0-stable
Severity: normal Keywords: symlinks createlinks space
Cc:

Description

Starting my site failed with:

ERROR 09 Mar 2010 15:12:28 [WrapperSimpleAppMain] org.drftpd.master.ConnectionManager  - 
java.lang.IllegalArgumentException: Illegal filename - /INC/Dreams/S03/Alabama.Dreams.S03E10.Der.Aussenseiter.GERMAN.WS.dTV.XviD-FKKTV;size=0;modify=20100306174532.664;unix.owner=nobody;unix.group=drftpd; [SERIEN_ARCHIV]-Alabama.Dreams.S03E10.Der.Aussenseiter.GERMAN.WS.dTV.XviD-FKKTV
        at org.drftpd.remotefile.LinkedRemoteFile.<init>(LinkedRemoteFile.java:142)
        at org.drftpd.remotefile.LinkedRemoteFile.putFile(LinkedRemoteFile.java:1234)
        at org.drftpd.remotefile.LinkedRemoteFile.putFile(LinkedRemoteFile.java:1169)
        at org.drftpd.remotefile.MLSTSerialize.unserialize(MLSTSerialize.java:245)
        at org.drftpd.remotefile.MLSTSerialize.unserialize(MLSTSerialize.java:274)
        at org.drftpd.remotefile.MLSTSerialize.loadMLSTFileDatabase(MLSTSerialize.java:285)
        at org.drftpd.GlobalContext.loadRSlavesAndRoot(GlobalContext.java:258)
        at org.drftpd.GlobalContext.<init>(GlobalContext.java:104)
        at org.drftpd.master.ConnectionManager.<init>(ConnectionManager.java:70)
        at org.drftpd.master.ConnectionManager.main(ConnectionManager.java:127)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:238)
        at java.lang.Thread.run(Thread.java:636)

Cause of the problem was, that the symlink target contained a space, files.mlst line looked like that:

type=OS.unix=slink:/_ARCHIV/SERIEN/A/Alabama Dreams/S03/Alabama.Dreams.S03E10.Der.Aussenseiter.GERMAN.WS.dTV.XviD-FKKTV;size=0;modify=20100306174532.664;unix.owner=nobody;unix.group=drftpd; [SERIEN_ARCHIV]-Alabama.Dreams.S03E10.Der.Aussenseiter.GERMAN.WS.dTV.XviD-FKKTV

As i can read in src/org/drftpd/remotefile/MLSTSerialize.java around line 155, the unserialize function explodes the line by ' ' (space) to seperate attributes from Filename. This fails, because the target attribute already contains a space, so that the filename is invalid

The link was created by createlinks mod. Iam not sure if the space needs to be replaced some way.

i have fixed it quick&dirty like that:

Index: src/org/drftpd/remotefile/MLSTSerialize.java
===================================================================
--- src/org/drftpd/remotefile/MLSTSerialize.java        (revision 2019)
+++ src/org/drftpd/remotefile/MLSTSerialize.java        (working copy)
@@ -149,7 +149,13 @@
                 return;
             }
 
-            int pos = line.indexOf(' ');
+           int testsize = line.indexOf(";size=0");
+           
+            int pos;
+           if(testsize!=-1)
+               pos = line.indexOf(' ',testsize);
+       else
+               pos = line.indexOf(' ');
 
             if (pos == -1) {
                 throw new CorruptFileListException("\"" + line +
Note: See TracTickets for help on using tickets.