Anonymous avatar Anonymous committed 30b0e1e

Issue number: CACHE-110 Escape of ?
Submitted by: Lars Torunski

Comments (0)

Files changed (1)

src/plugins/diskpersistence/java/com/opensymphony/oscache/plugins/diskpersistence/DiskPersistenceListener.java

  */
 package com.opensymphony.oscache.plugins.diskpersistence;
 
-import com.opensymphony.oscache.base.Config;
-import com.opensymphony.oscache.base.persistence.CachePersistenceException;
-import com.opensymphony.oscache.base.persistence.PersistenceListener;
-import com.opensymphony.oscache.web.ServletCacheAdministrator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.io.*;
-
-import java.util.Set;
-
-import javax.servlet.jsp.PageContext;
-
 /**
  * Persist the cache data to disk.
  *
  * @author <a href="&#109;a&#105;&#108;&#116;&#111;:chris&#64;swebtec.&#99;&#111;&#109;">Chris Miller</a>
  */
 public class DiskPersistenceListener extends AbstractDiskPersistenceListener {
+    
+    private static final String CHARS_TO_CONVERT = "./\\ :;\"\'_?";
+    
     /**
     * Build cache file name for the specified cache entry key.
     *
         }
 
         char[] chars = key.toCharArray();
-        char[] fileChars = new char[chars.length];
+        
+        StringBuffer sb = new StringBuffer(chars.length + 8);
 
         for (int i = 0; i < chars.length; i++) {
             char c = chars[i];
+            int pos = CHARS_TO_CONVERT.indexOf(c);
+    
+            if (i >= 0) {
+                sb.append('_');
+                sb.append(i);
+            } else {
+                sb.append(c);
+            }
 
-            switch (c) {
-                case '.':
-                case '/':
-                case '\\':
-                case ' ':
-                case ':':
-                case ';':
-                case '"':
-                case '\'':
-                    fileChars[i] = '_';
-                    break;
-                default:
-                    fileChars[i] = c;
-            }
         }
 
+        char[] fileChars = new char[sb.length()];
+        sb.getChars(0, fileChars.length, fileChars, 0);
         return fileChars;
     }
 }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.