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);