Corrected patch (removed unnecessary/unwanted file removal).

C.

diff -ruN nss-mdns-0.10/src/nss.c nss-mdns-0.10.XF/src/nss.c
--- nss-mdns-0.10/src/nss.c     2007-05-13 00:43:48.000000000 +1000
+++ nss-mdns-0.10.XF/src/nss.c  2009-03-26 02:08:57.944206926 +1100
@@ -69,7 +69,7 @@
 
 #define ALIGN(idx) do { \
   if (idx % sizeof(void*)) \
-    idx += (sizeof(void*) - idx % sizeof(void*)); /* Align on 32 bit boundary 
*/ \
+    idx += (sizeof(void*) - idx % sizeof(void*)); /* Align on word boundary */ 
\
 } while(0)
 
 struct userdata {
@@ -514,7 +514,7 @@
     result->h_length = address_length;
     
     /* Check if there's enough space for the addresses */
-    if (buflen < idx+u.data_len+sizeof(char*)*(u.count+1)) {
+    if (buflen < idx+u.data_len+sizeof(char*)*(u.count+1)+sizeof(void*)) {
         *errnop = ERANGE;
         *h_errnop = NO_RECOVERY;
         status = NSS_STATUS_TRYAGAIN;
@@ -525,9 +525,10 @@
     astart = idx;
     l = u.count*address_length;
     memcpy(buffer+astart, &u.data, l);
-    /* address_length is a multiple of 32bits, so idx is still aligned
-     * correctly */
     idx += l;
+    /* realign, whilst the address is a multiple of 32bits, we
+     * frequently lose alignment for 64bit systems */
+    ALIGN(idx);
 
     /* Address array address_lenght is always a multiple of 32bits */
     for (i = 0; i < u.count; i++)
_______________________________________________
Pkg-utopia-maintainers mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-utopia-maintainers

Reply via email to