Bug 46686

Summary: [PATCH] FontCache.getDefaultCacheFile() method returns a non-existant file handle
Product: Fop - Now in Jira Reporter: Alok Singh <alok>
Component: fontsAssignee: fop-dev
Status: CLOSED FIXED    
Severity: normal CC: alok
Priority: P2 Keywords: PatchAvailable
Version: all   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Attachments: Patch to FontCache to use a fallback if the user directory is not writable

Description Alok Singh 2009-02-09 15:33:38 UTC
Created attachment 23243 [details]
Patch to FontCache to use a fallback if the user directory is not writable

Method getDefaultCacheFile() returns an invalid file handle because it doesn't check to see if the directory is writable.
{code}

private static File getUserHome() {
        String s = System.getProperty("user.home");
        if (s != null) {
            File userDir = new File(s);
            if (userDir.exists()) {
                return userDir;
            }
        }
        return null;
    }


/**
     * Returns the default font cache file.
     * @param forWriting true if the user directory should be created
     * @return the default font cache file
     */
    public static File getDefaultCacheFile(boolean forWriting) {
        File userHome = getUserHome();
        if (userHome != null) {
            File fopUserDir = new File(userHome, FOP_USER_DIR);
            if (forWriting) {
                fopUserDir.mkdir();
            }
            return new File(fopUserDir, DEFAULT_CACHE_FILENAME);
        }
        return new File(FOP_USER_DIR);

}
{code}
The method getUserHome() can return a directory that is not a writable directory. In most cases, the user who is running the webserver has access to user.home, but some in some environments, it is possible that user.home is not writable. Anyway, a simple way to fix it would be to fall back to a the java.io.tmpdir if the userHome is not writable. See attached patch that has that fix
Comment 1 Jeremias Maerki 2009-02-11 00:42:58 UTC
Thanks for the patch. I've applied it with modifications:
http://svn.apache.org/viewvc?rev=743273&view=rev

The problem was that your code didn't handle the case correctly that the font cache already existed in the user home. It always switched to the temporary directory. I've also had trouble automatically applying the patch. Not sure what was wrong. Had to do it manually.
Comment 2 Glenn Adams 2012-04-01 07:09:02 UTC
batch transition pre-FOP1.0 resolved+fixed bugs to closed+fixed