diff --git a/filetype.cc b/filetype.cc index 779be256..fc9e6a08 100644 --- a/filetype.cc +++ b/filetype.cc @@ -61,7 +61,8 @@ bool isNameOfSound( string const & name ) endsWith( s, ".mpc" ) || endsWith( s, ".wma" ) || endsWith( s, ".wv" ) || - endsWith( s, ".ape" ); + endsWith( s, ".ape" ) || + endsWith( s, ".spx" ); } bool isNameOfPicture( string const & name ) diff --git a/mdictparser.cc b/mdictparser.cc index 48f565f9..9ef1f2f2 100644 --- a/mdictparser.cc +++ b/mdictparser.cc @@ -247,13 +247,20 @@ bool MdictParser::parseCompressedBlock( size_t compressedBlockSize, const char * quint32 type; quint32 checksum; type = qFromBigEndian( ( const uchar * ) compressedBlockPtr ); - checksum = qFromBigEndian( ( const uchar * )compressedBlockPtr + sizeof( type ) ); + checksum = qFromBigEndian( ( const uchar * )compressedBlockPtr + sizeof( quint32 ) ); if ( type == 0x00000000 ) { // No compression - checksum >>= 8; - if ( checksum != qFromBigEndian( dataSize - 2 ) ) + checksum &= 0xffff; + quint16 sum = 0; + for ( size_t i = 0; i < dataSize; i++ ) + { + sum += dataPtr[i]; + } + sum += 1; + + if ( checksum != sum ) { qWarning() << "MDict: parseCompressedBlock: plain: checksum not match"; return false; diff --git a/mdictparser.hh b/mdictparser.hh index 2f03be8d..39df86da 100644 --- a/mdictparser.hh +++ b/mdictparser.hh @@ -66,7 +66,7 @@ public: enum { - kParserVersion = 0x000000b + kParserVersion = 0x000000c }; struct RecordIndex