gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r36431 - gnunet/src/peerinfo


From: gnunet
Subject: [GNUnet-SVN] r36431 - gnunet/src/peerinfo
Date: Fri, 2 Oct 2015 16:52:08 +0200

Author: grothoff
Date: 2015-10-02 16:52:08 +0200 (Fri, 02 Oct 2015)
New Revision: 36431

Modified:
   gnunet/src/peerinfo/gnunet-service-peerinfo.c
Log:
-properly verify size, fixes #3991

Modified: gnunet/src/peerinfo/gnunet-service-peerinfo.c
===================================================================
--- gnunet/src/peerinfo/gnunet-service-peerinfo.c       2015-10-02 03:48:54 UTC 
(rev 36430)
+++ gnunet/src/peerinfo/gnunet-service-peerinfo.c       2015-10-02 14:52:08 UTC 
(rev 36431)
@@ -365,19 +365,32 @@
   {
     hello = (const struct GNUNET_HELLO_Message *) &buffer[read_pos];
     size_hello = GNUNET_HELLO_size (hello);
-    if (0 == size_hello)
+    if ( (0 == size_hello) ||
+         (size_total - read_pos < size_hello) )
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _("Failed to parse HELLO in file `%s'\n"),
+                  fn);
+      if (0 == read_pos)
       {
-       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                   _("Failed to parse HELLO in file `%s'\n"),
-                   fn);
-       if ((GNUNET_YES == unlink_garbage) &&
-           (0 != UNLINK (fn)) &&
-           (ENOENT != errno) )
-         GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
+        if ((GNUNET_YES == unlink_garbage) &&
+            (0 != UNLINK (fn)) &&
+            (ENOENT != errno) )
+          GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
                                     "unlink",
                                     fn);
-       return;
       }
+      else
+      {
+        if ((GNUNET_YES == unlink_garbage) &&
+            (0 != TRUNCATE (fn, read_pos)) &&
+            (ENOENT != errno) )
+          GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
+                                    "truncate",
+                                    fn);
+      }
+      return;
+    }
 
     now = GNUNET_TIME_absolute_get ();
     hello_clean = GNUNET_HELLO_iterate_addresses (hello, GNUNET_YES,




reply via email to

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