File gcab-checksum.patch of Package gcab

Index: gcab-0.5/libgcab/cabinet.c
===================================================================
--- gcab-0.5.orig/libgcab/cabinet.c
+++ gcab-0.5/libgcab/cabinet.c
@@ -403,7 +403,12 @@ cdata_write (cdata_t *cd, GDataOutputStr
         return FALSE;
 
     CHECKSUM datacsum = compute_checksum(cd->in, cd->ncbytes, 0);
-    cd->checksum = compute_checksum ((guint8*)&cd->ncbytes, 4, datacsum);
+    guint8 tmp[4];
+    tmp[0] = cd->ncbytes & 0xff;
+    tmp[1] = (cd->ncbytes >> 8) & 0xff;
+    tmp[2] = cd->nubytes & 0xff;
+    tmp[3] = (cd->nubytes >> 8) & 0xff;
+    cd->checksum = compute_checksum (tmp, 4, datacsum);
     GOutputStream *stream = g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (out));
 
     *bytes_written = 0;
@@ -462,7 +467,12 @@ cdata_read (cdata_t *cd, u1 res_data, gi
     RN (buf, cd->ncbytes);
 
     datacsum = compute_checksum(buf, cd->ncbytes, 0);
-    g_return_val_if_fail (cd->checksum == compute_checksum ((guint8*)&cd->ncbytes, 4, datacsum), FALSE);
+    guint8 tmp[4];
+    tmp[0] = cd->ncbytes & 0xff;
+    tmp[1] = (cd->ncbytes >> 8) & 0xff;
+    tmp[2] = cd->nubytes & 0xff;
+    tmp[3] = (cd->nubytes >> 8) & 0xff;
+    g_return_val_if_fail (cd->checksum == compute_checksum (tmp, 4, datacsum), FALSE);
 
     if (g_getenv ("GCAB_DEBUG")) {
         g_debug ("CDATA");
openSUSE Build Service is sponsored by