mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-12 06:00:48 +00:00
Slight cleanup
svn-id: r39069
This commit is contained in:
parent
f72e3354e8
commit
286670d424
@ -548,66 +548,33 @@ int decompress01(Resource *result, Common::ReadStream &stream, int sci_version)
|
|||||||
compressedLength, result->size);
|
compressedLength, result->size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool overflow = false;
|
||||||
|
|
||||||
switch (compressionMethod) {
|
switch (compressionMethod) {
|
||||||
case 0: // no compression
|
case 0: // no compression
|
||||||
if (result->size != compressedLength) {
|
if (result->size != compressedLength)
|
||||||
free(result->data);
|
overflow = true;
|
||||||
result->data = NULL;
|
else
|
||||||
result->status = SCI_STATUS_NOMALLOC;
|
|
||||||
free(buffer);
|
|
||||||
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
|
|
||||||
}
|
|
||||||
memcpy(result->data, buffer, compressedLength);
|
memcpy(result->data, buffer, compressedLength);
|
||||||
result->status = SCI_STATUS_ALLOCATED;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // Some huffman encoding
|
case 1: // Some huffman encoding
|
||||||
if (decrypt2(result->data, buffer, result->size, compressedLength)) {
|
if (decrypt2(result->data, buffer, result->size, compressedLength))
|
||||||
free(result->data);
|
overflow = true;
|
||||||
result->data = 0; // So that we know that it didn't work
|
|
||||||
result->status = SCI_STATUS_NOMALLOC;
|
|
||||||
free(buffer);
|
|
||||||
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
|
|
||||||
}
|
|
||||||
result->status = SCI_STATUS_ALLOCATED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2: // ???
|
|
||||||
decryptinit3();
|
|
||||||
if (decrypt3(result->data, buffer, result->size, compressedLength)) {
|
|
||||||
free(result->data);
|
|
||||||
result->data = 0; // So that we know that it didn't work
|
|
||||||
result->status = SCI_STATUS_NOMALLOC;
|
|
||||||
free(buffer);
|
|
||||||
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
|
|
||||||
}
|
|
||||||
result->status = SCI_STATUS_ALLOCATED;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
decryptinit3();
|
|
||||||
if (decrypt3(result->data, buffer, result->size, compressedLength)) {
|
|
||||||
free(result->data);
|
|
||||||
result->data = 0; // So that we know that it didn't work
|
|
||||||
result->status = SCI_STATUS_NOMALLOC;
|
|
||||||
free(buffer);
|
|
||||||
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
|
|
||||||
}
|
|
||||||
result->data = view_reorder(result->data, result->size);
|
|
||||||
result->status = SCI_STATUS_ALLOCATED;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
decryptinit3();
|
decryptinit3();
|
||||||
if (decrypt3(result->data, buffer, result->size, compressedLength)) {
|
if (decrypt3(result->data, buffer, result->size, compressedLength)) {
|
||||||
free(result->data);
|
overflow = true;
|
||||||
result->data = 0; // So that we know that it didn't work
|
} else {
|
||||||
result->status = SCI_STATUS_NOMALLOC;
|
if (compressionMethod == 3)
|
||||||
free(buffer);
|
result->data = view_reorder(result->data, result->size);
|
||||||
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
|
if (compressionMethod == 4)
|
||||||
}
|
|
||||||
result->data = pic_reorder(result->data, result->size);
|
result->data = pic_reorder(result->data, result->size);
|
||||||
result->status = SCI_STATUS_ALLOCATED;
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -621,8 +588,16 @@ int decompress01(Resource *result, Common::ReadStream &stream, int sci_version)
|
|||||||
return SCI_ERROR_UNKNOWN_COMPRESSION;
|
return SCI_ERROR_UNKNOWN_COMPRESSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (overflow) {
|
||||||
|
free(result->data);
|
||||||
|
result->data = 0; // So that we know that it didn't work
|
||||||
|
result->status = SCI_STATUS_NOMALLOC;
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
return SCI_ERROR_DECOMPRESSION_OVERFLOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
result->status = SCI_STATUS_ALLOCATED;
|
||||||
|
free(buffer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user