Compare commits

..

4 Commits

2 changed files with 23 additions and 13 deletions

View File

@@ -40,7 +40,7 @@
#define ACS_SERVER "http://adeactivate.adobe.com/adept" #define ACS_SERVER "http://adeactivate.adobe.com/adept"
#endif #endif
#define LIBGOUROU_VERSION "0.4.3" #define LIBGOUROU_VERSION "0.4.5"
namespace gourou namespace gourou
{ {

View File

@@ -441,21 +441,26 @@ void DRMProcessorClientImpl::inflate(std::string data, gourou::ByteArray& result
int ret = inflateInit2(&infstream, wbits); int ret = inflateInit2(&infstream, wbits);
ret = ::inflate(&infstream, Z_SYNC_FLUSH); if (ret != Z_OK)
EXCEPTION(gourou::CLIENT_ZIP_ERROR, infstream.msg);
ret = ::inflate(&infstream, Z_FINISH);
while (ret == Z_OK || ret == Z_STREAM_END) while (ret == Z_OK || ret == Z_STREAM_END)
{ {
result.append(buffer, dataSize-infstream.avail_out); result.append(buffer, dataSize-infstream.avail_out);
if (ret == Z_STREAM_END) break; if ((ret == Z_OK && infstream.avail_out != 0) || ret == Z_STREAM_END)
break;
infstream.avail_out = (uInt)dataSize; // size of output infstream.avail_out = (uInt)dataSize; // size of output
infstream.next_out = (Bytef *)buffer; // output char array infstream.next_out = (Bytef *)buffer; // output char array
ret = ::inflate(&infstream, Z_SYNC_FLUSH); ret = ::inflate(&infstream, Z_FINISH);
} }
inflateEnd(&infstream); if (ret == Z_STREAM_END)
ret = inflateEnd(&infstream);
delete[] buffer; delete[] buffer;
if (ret != Z_OK && ret != Z_STREAM_END && ret != Z_BUF_ERROR) if (ret != Z_OK && ret != Z_STREAM_END)
EXCEPTION(gourou::CLIENT_ZIP_ERROR, zError(ret)); EXCEPTION(gourou::CLIENT_ZIP_ERROR, zError(ret));
} }
@@ -479,20 +484,25 @@ void DRMProcessorClientImpl::deflate(std::string data, gourou::ByteArray& result
int ret = deflateInit2(&defstream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, wbits, int ret = deflateInit2(&defstream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, wbits,
compressionLevel, Z_DEFAULT_STRATEGY); compressionLevel, Z_DEFAULT_STRATEGY);
ret = ::deflate(&defstream, Z_SYNC_FLUSH); if (ret != Z_OK)
EXCEPTION(gourou::CLIENT_ZIP_ERROR, defstream.msg);
ret = ::deflate(&defstream, Z_FINISH);
while (ret == Z_OK || ret == Z_STREAM_END) while (ret == Z_OK || ret == Z_STREAM_END)
{ {
result.append(buffer, dataSize-defstream.avail_out); result.append(buffer, dataSize-defstream.avail_out);
if (ret == Z_STREAM_END) break; if ((ret == Z_OK && defstream.avail_out != 0) || ret == Z_STREAM_END)
break;
defstream.avail_out = (uInt)dataSize; // size of output defstream.avail_out = (uInt)dataSize; // size of output
defstream.next_out = (Bytef *)buffer; // output char array defstream.next_out = (Bytef *)buffer; // output char array
ret = ::deflate(&defstream, Z_SYNC_FLUSH); ret = ::deflate(&defstream, Z_FINISH);
} }
deflateEnd(&defstream); if (ret == Z_STREAM_END)
ret = deflateEnd(&defstream);
delete[] buffer; delete[] buffer;
if (ret != Z_OK && ret != Z_STREAM_END && ret != Z_BUF_ERROR) if (ret != Z_OK && ret != Z_STREAM_END)
EXCEPTION(gourou::CLIENT_ZIP_ERROR, zError(ret)); EXCEPTION(gourou::CLIENT_ZIP_ERROR, zError(ret));
} }