gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r4933 - GNUnet/src/server


From: gnunet
Subject: [GNUnet-SVN] r4933 - GNUnet/src/server
Date: Tue, 5 Jun 2007 22:27:24 -0600 (MDT)

Author: grothoff
Date: 2007-06-05 22:27:23 -0600 (Tue, 05 Jun 2007)
New Revision: 4933

Modified:
   GNUnet/src/server/connection.c
Log:
even more checks

Modified: GNUnet/src/server/connection.c
===================================================================
--- GNUnet/src/server/connection.c      2007-06-06 03:59:27 UTC (rev 4932)
+++ GNUnet/src/server/connection.c      2007-06-06 04:27:23 UTC (rev 4933)
@@ -1632,17 +1632,39 @@
 
   /* still room left? try callbacks! */
   pos = scl_nextHead;
-  while (pos != NULL) {
-    if (pos->minimumPadding + p <= totalMessageSize) {
-      p += pos->callback(&be->session.sender,
-                         &plaintextMsg[p],
-                        be->session.mtu - p);
+  while ( (pos != NULL) &&
+         (p < totalMessageSize) ) {
+    if ( (pos->minimumPadding + p >= p) &&
+        (pos->minimumPadding + p <= totalMessageSize) ) {
+      rsi = pos->callback(&be->session.sender,
+                         &plaintextMsg[p],
+                         totalMessageSize - p);
+      GE_BREAK(ectx,
+              rsi + p <= totalMessageSize);
+      if ( (rsi + p < p) ||
+          (rsi + p > totalMessageSize) ) {
+       GE_BREAK(ectx, 0);
+       FREE(plaintextMsg);    
+       be->inSendBuffer = NO;
+       return NO;      
+      }
+      p += rsi;
     }
     pos = pos->next;
   }
+  if ( ( (be->session.mtu != 0) &&
+        (p > be->session.mtu) ) 
+       || (p > totalMessageSize) ) {
+    GE_BREAK(ectx, 0);
+    FREE(plaintextMsg);    
+    be->inSendBuffer = NO;
+    return NO;
+  }
 
   /* finally padd with noise */
   if ( (p + sizeof(MESSAGE_HEADER) <= totalMessageSize) &&
+       (p < totalMessageSize) &&
+       (p + sizeof(MESSAGE_HEADER) > p) && 
        (disable_random_padding == NO) ) {
     MESSAGE_HEADER part;
     unsigned short noiseLen = totalMessageSize - p;
@@ -1658,13 +1680,15 @@
     if (stats != NULL)
       stats->change(stat_noise_sent, noiseLen);
   }
-  if ( (be->session.mtu != 0) &&
-       (p > be->session.mtu) ) {
+  if ( ( (be->session.mtu != 0) &&
+        (p > be->session.mtu) )
+       || (p > totalMessageSize) ) {
     GE_BREAK(ectx, 0);
     FREE(plaintextMsg);    
     be->inSendBuffer = NO;
     return NO;
   }
+
   encryptedMsg = MALLOC(p);
   hash(&p2pHdr->sequenceNumber,
        p - sizeof(HashCode512), 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]