1. opensymphony
  2. oscache

Commits

ltor...@81dbac14-341a-0410-aa85-cbcd92e6f43e  committed 30b0e1e

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

  • Participants
  • Parent commits 6e34b77
  • Branches v2_1_1

Comments (0)

Files changed (1)

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

View file
  • Ignore whitespace
  */
 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;
     }
 }