Merge pull request #401 from xiaoyifang/fix/epwing-load-article

fix: epwing load article protection when load invalid address
This commit is contained in:
xiaoyifang 2023-03-21 00:56:48 +08:00 committed by GitHub
commit b3a1d27c2f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 12 deletions

View file

@ -352,6 +352,8 @@ void EpwingDictionary::loadArticleNextPage(string & articleHeadword, string & ar
{
text = QString( "Article reading error: %1")
.arg( QString::fromUtf8( e.what() ) );
articleText = string( text.toUtf8().data() );
return;
}
articleHeadword = string( headword.toUtf8().data() );
@ -384,9 +386,11 @@ void EpwingDictionary::loadArticlePreviousPage(
{
Mutex::Lock _( eBook.getLibMutex() );
pos = eBook.getArticlePreviousPage( headword, text, articlePage, articleOffset, false );
} catch( std::exception & e )
{
text = QString( "Article reading error: %1" ).arg( QString::fromUtf8( e.what() ) );
}
catch( std::exception & e ) {
text = QString( "Article reading error: %1" ).arg( QString::fromUtf8( e.what() ) );
articleText = string( text.toUtf8().data() );
return;
}
articleHeadword = string( headword.toUtf8().data() );
@ -629,17 +633,17 @@ void EpwingArticleRequest::run()
articlesIncluded.insert( chain[ x ].articleOffset );
}
// Also try to find word in the built-in dictionary index
getBuiltInArticle(word, pages, offsets, mainArticles );
for( unsigned x = 0; x < alts.size(); ++x )
{
getBuiltInArticle( alts[ x ], pages, offsets, alternateArticles );
}
QRegularExpressionMatch m = RX::Epwing::refWord.match( gd::toQString( word ) );
bool ref = m.hasMatch();
if( !ref ) {
// Also try to find word in the built-in dictionary index
getBuiltInArticle( word, pages, offsets, mainArticles );
for( unsigned x = 0; x < alts.size(); ++x ) {
getBuiltInArticle( alts[ x ], pages, offsets, alternateArticles );
}
}
if ( mainArticles.empty() && alternateArticles.empty() && !ref)
{
// No such word

View file

@ -47,6 +47,7 @@
#include "resourceschemehandler.h"
#include "keyboardstate.hh"
#include "base/globalregex.hh"
#ifdef Q_OS_MAC
#include "macmouseover.hh"
@ -4186,7 +4187,9 @@ void MainWindow::focusWordList()
void MainWindow::addWordToHistory( const QString & word )
{
history.addItem( History::Item( 1, word.trimmed() ) );
if(QRegularExpressionMatch m = RX::Epwing::refWord.match( word ); m.hasMatch() )
return;
history.addItem( History::Item( 1, word.trimmed() ) );
}
void MainWindow::forceAddWordToHistory( const QString & word )