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