Skip to content

Commit

Permalink
Merge pull request #1584 from xiaoyifang/fix/slob-truncate
Browse files Browse the repository at this point in the history
fix: slob truncated file check.
  • Loading branch information
xiaoyifang authored Jun 14, 2024
2 parents ac8c459 + 5712f63 commit 4ac44e9
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions src/dict/slob.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ using BtreeIndexing::IndexedWords;
using BtreeIndexing::IndexInfo;

DEF_EX_STR( exNotSlobFile, "Not an Slob file", Dictionary::Ex )
DEF_EX( exTruncateFile, "Slob file truncated", Dictionary::Ex )
using Dictionary::exCantReadFile;
DEF_EX_STR( exCantDecodeFile, "Can't decode file", Dictionary::Ex )
DEF_EX_STR( exNoCodecFound, "No text codec found", Dictionary::Ex )
Expand Down Expand Up @@ -323,8 +324,8 @@ void SlobFile::open( const QString & name )
encoding = readTinyText();

codec = QTextCodec::codecForName( encoding.toLatin1() );
if ( codec == 0 ) {
error = QString( "for encoding \"" ) + encoding + "\"";
if ( codec == nullptr ) {
error = QString( R"(for encoding "%1")" ).arg( encoding );
throw exNoCodecFound( string( error.toUtf8().data() ) );
}

Expand Down Expand Up @@ -383,6 +384,11 @@ void SlobFile::open( const QString & name )
break;
fileSize = qFromBigEndian( tmp );

//truncated file
if ( file.size() < fileSize ) {
throw exTruncateFile();
}

if ( file.read( (char *)&cnt, sizeof( cnt ) ) != sizeof( cnt ) )
break;
refsCount = qFromBigEndian( cnt );
Expand Down Expand Up @@ -672,13 +678,7 @@ SlobDictionary::SlobDictionary( string const & id, string const & indexFile, vec
idxHeader( idx.read< IdxHeader >() )
{
// Open data file

try {
sf.open( dictionaryFiles[ 0 ].c_str() );
}
catch ( std::exception & e ) {
gdWarning( "Slob dictionary initializing failed: %s, error: %s\n", dictionaryFiles[ 0 ].c_str(), e.what() );
}
sf.open( dictionaryFiles[ 0 ].c_str() );

// Initialize the indexes

Expand Down

0 comments on commit 4ac44e9

Please sign in to comment.