aboutsummaryrefslogtreecommitdiffstats
path: root/sysutils/zidrav/files/patch-core.cpp
blob: c48de15e8ff1715abe34e03715f3b355467008ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
--- core.cpp.orig	2005-05-21 22:16:50.000000000 +0200
+++ core.cpp	2014-01-07 06:41:30.000000000 +0100
@@ -38,7 +38,7 @@
 
 void be_write32le(iostream &output, char *buf)
 {
-	int data;
+	int data = 0;
 	data = *(int*)buf;
 
 	data = SwapBO32(data);
@@ -48,7 +48,7 @@
 
 void be_read32le(istream &input, char *buf)
 {
-	int data;
+	int data = 0;
 	input.read((char *)&data, 4);
 
 	data = SwapBO32(data);
@@ -59,7 +59,7 @@
 
 	char	*buffer;
 	int		i;
-	long	crc;
+	crc32_type	crc;
     short   oldprc = 0;
     
 	output.write( ZC, 8 );
@@ -105,11 +105,11 @@
 
 void MakePatchCore( istream &cdti, istream &vstr, iostream &output, int cdtlen, int vstrlen, int * efound) {
 
-	long filesize;
-	long blocksize;
+	long filesize = 0; // reset all 64bit
+	long blocksize = 0; // reset all 64bit
 
-	long crc;
-	long cdtcrc;
+	crc32_type crc;
+	crc32_type cdtcrc = 0; // reset all 64bit
 
 	long curbs;
 
@@ -207,12 +207,12 @@
 
 void ApplyPatchCore( istream &cdpi, iostream &pstr, int cdplen, int pstrlen) {
 
-	long filesize;
-	long blocksize;
+	long filesize = 0; // reset all 64bit
+	long blocksize = 0; // reset all 64bit
 
 	long curbs = 0;
 
-	long offset;
+	long offset = 0; // reset all 64bit
 
 	char *buffer = NULL;
 
@@ -266,7 +266,8 @@
 
 	char minibuff[9];
 
-	long crc;
+	crc32_type crc;
+	crc32_type filecrc = 0; // reset all 64bit
 
 	buffer = new char[10];
 
@@ -317,12 +318,12 @@
     }
 
 	input.seekg( 0 );						// go to the beginning
-	input.read( buffer, datalen );		// and pull it all
+	input.read( buffer, datalen - 4 );		// and pull it all
+        read32le(input, (char *)&filecrc);
 
 	CreateChecksum( buffer, datalen - 4, &crc );
 
-	if( crc != int32tole(*(int *)&buffer[ datalen - 4 ]) ) {
-		delete [] buffer;
+	if( crc != filecrc ) {
         switch(emsg)
         {
             case IDS_UPT_INVCDT:
@@ -342,7 +343,7 @@
 void MakeOverallChecksum( iostream &st, long size ) {
 
 	char *buffer;
-	long crc;
+	crc32_type crc;
 
     // FIXME: trying to load whole file... again... :(
 	buffer = new char[size];
@@ -367,7 +368,7 @@
 #define DO8( buffer )  DO4( buffer ); DO4( buffer );
 #define DO16( buffer )  DO8( buffer ); DO8( buffer );
 
-void CreateChecksum( char *buffer, long size, long *crc ) {
+void CreateChecksum( char *buffer, long size, crc32_type *crc ) {
 
 	*crc = 0;