Bug 46686 - [PATCH] FontCache.getDefaultCacheFile() method returns a non-existant file handle
Summary: [PATCH] FontCache.getDefaultCacheFile() method returns a non-existant file ha...
Alias: None
Product: Fop - Now in Jira
Classification: Unclassified
Component: fonts (show other bugs)
Version: all
Hardware: PC Linux
: P2 normal
Target Milestone: ---
Assignee: fop-dev
Keywords: PatchAvailable
Depends on:
Reported: 2009-02-09 15:33 UTC by Alok Singh
Modified: 2012-04-01 07:09 UTC (History)
1 user (show)

Patch to FontCache to use a fallback if the user directory is not writable (1.81 KB, text/plain)
2009-02-09 15:33 UTC, Alok Singh

Note You need to log in before you can comment on or make changes to this bug.
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.

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) {
            return new File(fopUserDir, DEFAULT_CACHE_FILENAME);
        return new File(FOP_USER_DIR);

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:

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