Author: nextgens
Date: 2007-11-22 09:34:27 +0000 (Thu, 22 Nov 2007)
New Revision: 15916

Modified:
   trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
   trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java
   trunk/freenet/src/freenet/config/FilePersistentConfig.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeCrypto.java
   trunk/freenet/src/freenet/node/Persister.java
   trunk/freenet/src/freenet/support/SimpleFieldSet.java
Log:
Fix some UTF-8 related bugs, including

#1883 (non-ascii characters do not work in freenet bookmarks)
#1427 (Node name does not support Unicode)
#1422 (Noderef invalid if it contains foreing characters)

Modified: trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java   
2007-11-22 07:55:28 UTC (rev 15915)
+++ trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java   
2007-11-22 09:34:27 UTC (rev 15916)
@@ -309,9 +309,8 @@
             } else if ("edit".equals(action) || "addItem".equals(action) || 
"addCat".equals(action)) {

                 String name = "unnamed";
-                if (req.getPartAsString("name", MAX_NAME_LENGTH).length() > 0) 
{
+                if (req.isPartSet("name"))
                     name = req.getPartAsString("name", MAX_NAME_LENGTH);
-                }

                 if ("edit".equals(action)) {
                     bookmarkManager.renameBookmark(bookmarkPath, name);
@@ -333,7 +332,6 @@
                     } else {
                         newBookmark = new BookmarkCategory(name);
                     }
-
                     bookmarkManager.addBookmark(bookmarkPath, newBookmark);
                     bookmarkManager.storeBookmarks();
                     HTMLNode successBox = 
content.addChild(pageMaker.getInfobox("infobox-success", 
L10n.getString("BookmarkEditorToadlet.addedNewBookmarkTitle")));

Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java        
2007-11-22 07:55:28 UTC (rev 15915)
+++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java        
2007-11-22 09:34:27 UTC (rev 15916)
@@ -22,6 +22,7 @@
 import freenet.support.io.Closer;
 import freenet.support.io.FileUtil;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.Iterator;
@@ -364,10 +365,10 @@
             }
             sfs = toSave;
         }
-        FileWriter fw = null;
+        FileOutputStream fos = null;
         try {
-            fw = new FileWriter(backupBookmarksFile);
-            sfs.writeTo(fw);
+            fos = new FileOutputStream(backupBookmarksFile);
+            sfs.writeTo(fos);

             if (!FileUtil.renameTo(backupBookmarksFile, bookmarksFile)) {
                 Logger.error(this, "Unable to rename " + 
backupBookmarksFile.toString() + " to " + bookmarksFile.toString());
@@ -375,7 +376,7 @@
         } catch (IOException ioe) {
             Logger.error(this, "An error has occured saving the bookmark file 
:" + ioe.getMessage(), ioe);
         } finally {
-            Closer.close(fw);
+            Closer.close(fos);

             synchronized (bookmarks) {
                 isSavingBookmarks = false;

Modified: trunk/freenet/src/freenet/config/FilePersistentConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/FilePersistentConfig.java  2007-11-22 
07:55:28 UTC (rev 15915)
+++ trunk/freenet/src/freenet/config/FilePersistentConfig.java  2007-11-22 
09:34:27 UTC (rev 15916)
@@ -15,6 +15,7 @@

 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
+import freenet.support.io.Closer;
 import freenet.support.io.FileUtil;
 import freenet.support.io.LineReadingInputStream;

@@ -136,17 +137,15 @@
                SimpleFieldSet fs = exportFieldSet();
                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "fs = "+fs);
-               FileOutputStream fos = new FileOutputStream(tempFilename);
+                FileOutputStream fos = null;
                try {
-                       BufferedWriter bw = new BufferedWriter(new 
OutputStreamWriter(fos, "UTF-8"));
-                       synchronized(this) {
-                               fs.writeTo(bw);
-                       }
-                       bw.close();
-               } catch (IOException e) {
-                       fos.close();
-                       throw e;
-               }
+                    fos = new FileOutputStream(tempFilename);
+                    synchronized(this) {
+                        fs.writeTo(fos);
+                    }
+                } finally {
+                    Closer.close(fos);
+                }

                 FileUtil.renameTo(tempFilename, filename);
        }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-11-22 07:55:28 UTC (rev 
15915)
+++ trunk/freenet/src/freenet/node/Node.java    2007-11-22 09:34:27 UTC (rev 
15916)
@@ -7,14 +7,12 @@
 package freenet.node;

 import java.io.BufferedReader;
-import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.security.MessageDigest;
@@ -477,14 +475,14 @@
                FileOutputStream fos = null;
                try {
                        fos = new FileOutputStream(backup);
-                       OutputStreamWriter osr = new OutputStreamWriter(fos, 
"UTF-8");
-                       BufferedWriter bw = new BufferedWriter(osr);
-                       fs.writeTo(bw);
-                       bw.close();
-                        FileUtil.renameTo(backup, orig);
-               } catch (IOException e) {
+                       fs.writeTo(fos);
+                } catch (IOException ioe){
+                        Logger.error(this, "IOE :"+ioe.getMessage(), ioe);
+                        return;
+                } finally {
                         Closer.close(fos);
                }
+                FileUtil.renameTo(backup, orig);
        }

        private void initNodeFileSettings(RandomSource r) {

Modified: trunk/freenet/src/freenet/node/NodeCrypto.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeCrypto.java      2007-11-22 07:55:28 UTC 
(rev 15915)
+++ trunk/freenet/src/freenet/node/NodeCrypto.java      2007-11-22 09:34:27 UTC 
(rev 15916)
@@ -3,10 +3,8 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.node;

-import java.io.BufferedWriter;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.net.MalformedURLException;
@@ -32,6 +30,7 @@
 import freenet.support.IllegalBase64Exception;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
+import freenet.support.io.Closer;

 /**
  * Cryptographic and transport level node identity. 
@@ -337,23 +336,15 @@
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                DeflaterOutputStream gis;
                gis = new DeflaterOutputStream(baos);
-               OutputStreamWriter osw;
                try {
-                       osw = new OutputStreamWriter(gis, "UTF-8");
-               } catch (UnsupportedEncodingException e2) {
-                       throw new Error(e2);
+                       fs.writeTo(gis);
+                } catch (IOException e) {
+                    Logger.error(this, "IOE :"+e.getMessage(), e);
+               } finally {
+                       Closer.close(gis);
+                        Closer.close(baos);
                }
-               BufferedWriter bw = new BufferedWriter(osw);
-               try {
-                       fs.writeTo(bw);
-               } catch (IOException e) {
-                       throw new Error(e);
-               }
-               try {
-                       bw.close();
-               } catch (IOException e1) {
-                       throw new Error(e1);
-               }
+               
                byte[] buf = baos.toByteArray();
                byte[] obuf = new byte[buf.length + 1];
                obuf[0] = 1;

Modified: trunk/freenet/src/freenet/node/Persister.java
===================================================================
--- trunk/freenet/src/freenet/node/Persister.java       2007-11-22 07:55:28 UTC 
(rev 15915)
+++ trunk/freenet/src/freenet/node/Persister.java       2007-11-22 09:34:27 UTC 
(rev 15916)
@@ -1,17 +1,14 @@
 package freenet.node;

-import java.io.BufferedOutputStream;
-import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;

 import freenet.support.Logger;
 import freenet.support.OOMHandler;
 import freenet.support.SimpleFieldSet;
+import freenet.support.io.Closer;
 import freenet.support.io.FileUtil;

 class Persister implements Runnable {
@@ -63,37 +60,22 @@
                SimpleFieldSet fs = persistable.persistThrottlesToFieldSet();
                try {
                        FileOutputStream fos = new 
FileOutputStream(persistTemp);
-                       // FIXME common pattern, reuse it.
-                       BufferedOutputStream bos = new 
BufferedOutputStream(fos);
-                       OutputStreamWriter osw = new OutputStreamWriter(bos, 
"UTF-8");
-                       BufferedWriter bw = new BufferedWriter(osw);
                        try {
-                               fs.writeTo(bw);
+                               fs.writeTo(fos);
                        } catch (IOException e) {
                                try {
                                        fos.close();
                                        persistTemp.delete();
                                        return;
-                               } catch (IOException e1) {
-                                       // Ignore
-                               }
+                               } catch (IOException e1) {}
                        }
-                       try {
-                               bw.close();
-                       } catch (IOException e) {
-                               // Huh?
-                               Logger.error(this, "Caught while closing: "+e, 
e);
-                               return;
-                       }
+                       Closer.close(fos);

                         FileUtil.renameTo(persistTemp, persistTarget);
                } catch (FileNotFoundException e) {
                        Logger.error(this, "Could not store throttle data to 
disk: "+e, e);
                        return;
-               } catch (UnsupportedEncodingException e) {
-                       Logger.error(this, "Unsupported encoding: UTF-8 !!!!: 
"+e, e);
-               }
-               
+                }
        }

        public SimpleFieldSet read() {

Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java       2007-11-22 
07:55:28 UTC (rev 15915)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java       2007-11-22 
09:34:27 UTC (rev 15916)
@@ -350,6 +350,8 @@
      * Write the contents of the SimpleFieldSet to a Writer.
      * Note: The caller *must* buffer the writer to avoid lousy performance!
      * (StringWriter is by definition buffered, otherwise wrap it in a 
BufferedWriter)
+     *
+     * @warning keep in mind that a Writer is not necessarily UTF-8!!
      */
        public void writeTo(Writer w) throws IOException {
                writeTo(w, "", false);
@@ -359,6 +361,8 @@
      * Write the contents of the SimpleFieldSet to a Writer.
      * Note: The caller *must* buffer the writer to avoid lousy performance!
      * (StringWriter is by definition buffered, otherwise wrap it in a 
BufferedWriter)
+     * 
+     * @warning keep in mind that a Writer is not necessarily UTF-8!!
      */
     synchronized void writeTo(Writer w, String prefix, boolean noEndMarker) 
throws IOException {
        for(Iterator i = values.entrySet().iterator();i.hasNext();) {
@@ -686,7 +690,7 @@
                return readFrom(new FileInputStream(f), allowMultiple, 
shortLived);
        }

-        public void writeTo(OutputStream os) {
+        public void writeTo(OutputStream os) throws IOException {
             BufferedOutputStream bos = null;
             OutputStreamWriter osw = null;
             BufferedWriter bw = null;
@@ -702,8 +706,6 @@
                 }
                 bw = new BufferedWriter(osw);
                 writeTo(bw);
-            } catch (IOException ioe) {
-                Logger.error("SimpleFieldSet", "An exception has occured while 
saving the SFS :"+ioe.getMessage(), ioe);
             }finally {
                 Closer.close(bw);
                 Closer.close(osw);


Reply via email to