ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Compress-LZF/LZF.xs
(Generate patch)

Comparing Compress-LZF/LZF.xs (file contents):
Revision 1.20 by root, Fri Jul 7 15:47:10 2006 UTC vs.
Revision 1.21 by root, Wed Sep 27 15:52:47 2006 UTC

143 143
144 csize -= skip; 144 csize -= skip;
145 145
146 if (src[0]) 146 if (src[0])
147 { 147 {
148 if (!(src[0] & 0x80)) 148 if (!(src[0] & 0x80) && csize >= 1)
149 { 149 {
150 csize -= 1; 150 csize -= 1;
151 usize = *src++ & 0xff; 151 usize = *src++ & 0xff;
152 } 152 }
153 else if (!(src[0] & 0x20)) 153 else if (!(src[0] & 0x20) && csize >= 2)
154 { 154 {
155 csize -= 2; 155 csize -= 2;
156 usize = *src++ & 0x1f; 156 usize = *src++ & 0x1f;
157 usize = (usize << 6) | (*src++ & 0x3f); 157 usize = (usize << 6) | (*src++ & 0x3f);
158 } 158 }
159 else if (!(src[0] & 0x10)) 159 else if (!(src[0] & 0x10) && csize >= 3)
160 { 160 {
161 csize -= 3; 161 csize -= 3;
162 usize = *src++ & 0x0f; 162 usize = *src++ & 0x0f;
163 usize = (usize << 6) | (*src++ & 0x3f); 163 usize = (usize << 6) | (*src++ & 0x3f);
164 usize = (usize << 6) | (*src++ & 0x3f); 164 usize = (usize << 6) | (*src++ & 0x3f);
165 } 165 }
166 else if (!(src[0] & 0x08)) 166 else if (!(src[0] & 0x08) && csize >= 4)
167 { 167 {
168 csize -= 4; 168 csize -= 4;
169 usize = *src++ & 0x07; 169 usize = *src++ & 0x07;
170 usize = (usize << 6) | (*src++ & 0x3f); 170 usize = (usize << 6) | (*src++ & 0x3f);
171 usize = (usize << 6) | (*src++ & 0x3f); 171 usize = (usize << 6) | (*src++ & 0x3f);
172 usize = (usize << 6) | (*src++ & 0x3f); 172 usize = (usize << 6) | (*src++ & 0x3f);
173 } 173 }
174 else if (!(src[0] & 0x04)) 174 else if (!(src[0] & 0x04) && csize >= 5)
175 { 175 {
176 csize -= 5; 176 csize -= 5;
177 usize = *src++ & 0x03; 177 usize = *src++ & 0x03;
178 usize = (usize << 6) | (*src++ & 0x3f); 178 usize = (usize << 6) | (*src++ & 0x3f);
179 usize = (usize << 6) | (*src++ & 0x3f); 179 usize = (usize << 6) | (*src++ & 0x3f);
180 usize = (usize << 6) | (*src++ & 0x3f); 180 usize = (usize << 6) | (*src++ & 0x3f);
181 usize = (usize << 6) | (*src++ & 0x3f); 181 usize = (usize << 6) | (*src++ & 0x3f);
182 } 182 }
183 else if (!(src[0] & 0x02)) 183 else if (!(src[0] & 0x02) && csize >= 6)
184 { 184 {
185 csize -= 6; 185 csize -= 6;
186 usize = *src++ & 0x01; 186 usize = *src++ & 0x01;
187 usize = (usize << 6) | (*src++ & 0x3f); 187 usize = (usize << 6) | (*src++ & 0x3f);
188 usize = (usize << 6) | (*src++ & 0x3f); 188 usize = (usize << 6) | (*src++ & 0x3f);
189 usize = (usize << 6) | (*src++ & 0x3f); 189 usize = (usize << 6) | (*src++ & 0x3f);
190 usize = (usize << 6) | (*src++ & 0x3f); 190 usize = (usize << 6) | (*src++ & 0x3f);
191 usize = (usize << 6) | (*src++ & 0x3f); 191 usize = (usize << 6) | (*src++ & 0x3f);
192 } 192 }
193 else 193 else
194 croak ("compressed data corrupted (invalid length)");
195
196 if (!usize)
194 croak ("compressed data corrupted (invalid length)"); 197 croak ("compressed data corrupted (invalid length)");
195 198
196 ret = NEWSV (0, usize); 199 ret = NEWSV (0, usize);
197 SvPOK_only (ret); 200 SvPOK_only (ret);
198 dst = SvPVX (ret); 201 dst = SvPVX (ret);
201 croak ("compressed data corrupted (size mismatch)", csize, skip, usize); 204 croak ("compressed data corrupted (size mismatch)", csize, skip, usize);
202 } 205 }
203 else 206 else
204 { 207 {
205 usize = csize - 1; 208 usize = csize - 1;
206 ret = NEWSV (0, usize); 209 ret = NEWSV (0, usize | 1);
207 SvPOK_only (ret); 210 SvPOK_only (ret);
208 211
209 Move ((void *)(src + 1), (void *)SvPVX (ret), usize, unsigned char); 212 Move ((void *)(src + 1), (void *)SvPVX (ret), usize, unsigned char);
210 } 213 }
211 214

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines