gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [gnunet] branch master updated: fix https://gnunet.org/bugs


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated: fix https://gnunet.org/bugs/view.php?id=4927
Date: Sun, 24 Jun 2018 17:59:27 +0200

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new b052576b8 fix https://gnunet.org/bugs/view.php?id=4927
     new d43ee059a Merge branch 'master' of git+ssh://gnunet.org/gnunet
b052576b8 is described below

commit b052576b8a85ac17a80fb7b8fea79d0502f8d95b
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Sun Jun 24 17:59:13 2018 +0200

    fix https://gnunet.org/bugs/view.php?id=4927
---
 src/gnsrecord/gnsrecord_serialization.c | 34 ++++++++++++++++++++++++++-------
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/src/gnsrecord/gnsrecord_serialization.c 
b/src/gnsrecord/gnsrecord_serialization.c
index adbf02755..82b09c24e 100644
--- a/src/gnsrecord/gnsrecord_serialization.c
+++ b/src/gnsrecord/gnsrecord_serialization.c
@@ -89,6 +89,7 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
                                   const struct GNUNET_GNSRECORD_Data *rd)
 {
   size_t ret;
+  size_t no_padding;
 
   ret = sizeof (struct NetworkRecord) * rd_count;
   for (unsigned int i=0;i<rd_count;i++)
@@ -120,6 +121,25 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
     GNUNET_break (0);
     return -1;
   }
+  //Do not pad PKEY
+  if (GNUNET_GNSRECORD_TYPE_PKEY == rd->record_type)
+    return ret;
+  /**
+   * Efficiently round up to the next
+   * power of 2 for padding
+   * https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
+   */
+  no_padding = ret;
+  ret--;
+  ret |= ret >> 1;
+  ret |= ret >> 2;
+  ret |= ret >> 4;
+  ret |= ret >> 8;
+  ret |= ret >> 16;
+  ret++;
+  //If padding record does not fit, pad again.
+  if ((ret - no_padding) < sizeof (struct NetworkRecord))
+    ret = ret << 1;
   return (ssize_t) ret;
 }
 
@@ -135,9 +155,9 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
  */
 ssize_t
 GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
-                                   const struct GNUNET_GNSRECORD_Data *rd,
-                                   size_t dest_size,
-                                   char *dest)
+                                    const struct GNUNET_GNSRECORD_Data *rd,
+                                    size_t dest_size,
+                                    char *dest)
 {
   struct NetworkRecord rec;
   size_t off;
@@ -190,7 +210,7 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
     }
 #endif
   }
-  return off;
+  return dest_size;
 }
 
 
@@ -205,9 +225,9 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
  */
 int
 GNUNET_GNSRECORD_records_deserialize (size_t len,
-                                     const char *src,
-                                     unsigned int rd_count,
-                                     struct GNUNET_GNSRECORD_Data *dest)
+                                      const char *src,
+                                      unsigned int rd_count,
+                                      struct GNUNET_GNSRECORD_Data *dest)
 {
   struct NetworkRecord rec;
   size_t off;

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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