gcab/gcab-checksum.patch

33 lines
1.3 KiB
Diff

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");