Author: toad
Date: 2007-04-18 19:11:26 +0000 (Wed, 18 Apr 2007)
New Revision: 12790

Modified:
   trunk/freenet/src/freenet/io/comm/Message.java
Log:
Include length of sub-messages, catch Throwable in case new sub-messages are 
wierd

Modified: trunk/freenet/src/freenet/io/comm/Message.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/Message.java      2007-04-18 19:05:29 UTC 
(rev 12789)
+++ trunk/freenet/src/freenet/io/comm/Message.java      2007-04-18 19:11:26 UTC 
(rev 12790)
@@ -76,9 +76,21 @@
                    }
                    if(mayHaveSubMessages) {
                        while(true) {
-                               Message subMessage = decodeMessage(dis, peer, 
0, false, true);
-                               if(subMessage == null) return m;
-                               m.addSubMessage(subMessage);
+                               int size = dis.readUnsignedShort();
+                               byte[] buf = new byte[size];
+                               try {
+                                       dis.readFully(buf);
+                               } catch (EOFException e) {
+                                       return m;
+                               }
+                               DataInputStream dis2 = new DataInputStream(new 
ByteArrayInputStream(buf));
+                               try {
+                                       Message subMessage = 
decodeMessage(dis2, peer, 0, false, true);
+                                       if(subMessage == null) return m;
+                                       m.addSubMessage(subMessage);
+                               } catch (Throwable t) {
+                                       Logger.error(Message.class, "Failed to 
read sub-message: "+t, t);
+                               }
                        }
                    }
                } catch (EOFException e) {


Reply via email to