Thierry Boileau wrote:
Hi Marc,

Thanks a lot for having reported this problem. An issue has been created :
http://restlet.tigris.org/issues/show_bug.cgi?id=337


ok, thx for confirming this as a defect.

I've taken the liberty of adding my proposed fix in patch-format to the issue.

I don't have a unit test to go with that though (since to my knowledge Java has no platform independent way of creating symbolic links)


regards,
-marc=


best regards,
Thierry Boileau
Hi all,

I'm testing an adapted version of org.restlet.example.tutorial.Part06 to make it display a directory listing of my home directory

The changed part looks like this:


        // Create an application
Application application = new Application(component.getContext()) {
            @Override
            public Restlet createRoot() {
final Directory directory = new Directory(getContext(), "file:///home/mpo");
                directory.setListingAllowed(true);
                directory.setIndexName("");
                return directory;
            }
        };

I'm running this on a linux system with a symbolic link in /home/mpo/mnt to /mnt

This symbolic link outside the directory-resources' root will cause a StringIndexOutOfBound on trying to make 'external' uri's for the local-references assembled in this.directoryContent:

Since that contains file:////mnt rather then file:////home/mpo/mnt
substracting the root-uri fails:

SEVERE: Unhandled exception or error intercepted
java.lang.StringIndexOutOfBoundsException: String index out of range: -2
    at java.lang.String.substring(String.java:1768)
    at java.lang.String.substring(String.java:1735)
at com.noelios.restlet.local.DirectoryResource.getVariants(DirectoryResource.java:445)
    at org.restlet.resource.Resource.handleGet(Resource.java:407)
at com.noelios.restlet.local.DirectoryResource.handleGet(DirectoryResource.java:254)

The problem is resolved by changing the method at org.restlet.data.LocalReference#86

    public static LocalReference createFileReference(File file)
            throws IOException {
        return createFileReference(file.getCanonicalPath());
    }

by replacing the 'getCanonicalPath' to 'getAbsolutePath'


AFAICS making the reference 'canonical' is outside the responsibility of the LocalReference class, but I might be jumping to conclusions here.

kind regards,
-marc=

Reply via email to