Slight cleanup

svn-id: r39069
This commit is contained in:
Filippos Karapetis 2009-03-02 10:41:37 +00:00
parent f72e3354e8
commit 286670d424

View File

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