When saving capabilities replace the '/' character by a '.'
authorDa Risk <da_risk@beem-project.com>
Thu, 25 Aug 2011 14:51:07 +0200
changeset 901 6e5999172eb1
parent 900 56e0eadf8e87
child 902 c82293948d2f
child 903 970559c45e43
When saving capabilities replace the '/' character by a '.' The character '.' is not in the base64 table and can replace the file separator char '/' in unix. fix #366
src/com/beem/project/beem/service/BeemCapsManager.java
--- a/src/com/beem/project/beem/service/BeemCapsManager.java	Mon Aug 22 23:13:38 2011 +0200
+++ b/src/com/beem/project/beem/service/BeemCapsManager.java	Thu Aug 25 14:51:07 2011 +0200
@@ -93,7 +93,7 @@
 
     @Override
     protected DiscoverInfo load(String ver) {
-	File fver = new File(mCacheDir, ver);
+	File fver = new File(mCacheDir, sanitizeName(ver));
 	try {
 	    Reader fr = new BufferedReader(new FileReader(fver));
 	    try {
@@ -115,7 +115,8 @@
 
     @Override
     protected void store(String ver, DiscoverInfo info) {
-	File fver = new File(mCacheDir, ver);
+
+	File fver = new File(mCacheDir, sanitizeName(ver));
 	try {
 	    Writer fw = new BufferedWriter(new FileWriter(fver));
 	    try {
@@ -133,7 +134,7 @@
     protected boolean isInCache(String ver) {
 	boolean result = super.isInCache(ver);
 	if (!result) {
-	    File fver = new File(mCacheDir, ver);
+	    File fver = new File(mCacheDir, sanitizeName(ver));
 	    result = fver.exists();
 	}
 	return result;
@@ -159,4 +160,13 @@
 	fact.setNamespaceAware(true);
 	return fact.newPullParser();
     }
+
+    /**
+     * Sanitize the base64 ver attribute in order to use it as a filename.
+     * @param ver the base64 ver attribute
+     * @return a sanitize filename for the ver attribute
+     */
+    private String sanitizeName(String ver) {
+	return ver.replaceAll("/", ".");
+    }
 }