From adef668b2e19feaa045ebf3f01701a3a1895ddbb Mon Sep 17 00:00:00 2001 From: kdt523 Date: Sat, 11 Oct 2025 00:21:51 +0530 Subject: [PATCH 1/2] Fix crash when tessdata directory doesn't exist --- src/api/baseapi.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/api/baseapi.cpp b/src/api/baseapi.cpp index 37020fa938..de4f40f883 100644 --- a/src/api/baseapi.cpp +++ b/src/api/baseapi.cpp @@ -146,14 +146,24 @@ static void ExtractFontName(const char* filename, std::string* fontname) { */ static void addAvailableLanguages(const std::string &datadir, std::vector *langs) { - for (const auto& entry : - std::filesystem::recursive_directory_iterator(datadir, - std::filesystem::directory_options::follow_directory_symlink | - std::filesystem::directory_options::skip_permission_denied)) { - auto path = entry.path().lexically_relative(datadir); - if (path.extension() == ".traineddata") { - langs->push_back(path.replace_extension("").string()); + // Check if directory exists before attempting to iterate + if (!std::filesystem::exists(datadir) || !std::filesystem::is_directory(datadir)) { + return; + } + + try { + for (const auto& entry : + std::filesystem::recursive_directory_iterator(datadir, + std::filesystem::directory_options::follow_directory_symlink | + std::filesystem::directory_options::skip_permission_denied)) { + auto path = entry.path().lexically_relative(datadir); + if (path.extension() == ".traineddata") { + langs->push_back(path.replace_extension("").string()); + } } + } catch (const std::filesystem::filesystem_error&) { + // Silently handle filesystem errors (e.g., permission denied, corrupted filesystem) + // The function will return with whatever languages were found so far } } From be19ce6d1d2dcecd44a65e6e8b3ccd1e6173ac4d Mon Sep 17 00:00:00 2001 From: kdt523 Date: Sat, 11 Oct 2025 14:48:41 +0530 Subject: [PATCH 2/2] use try-catch only to handle filesystem errors in addAvailableLanguages --- src/api/baseapi.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/api/baseapi.cpp b/src/api/baseapi.cpp index de4f40f883..d3b4094d7b 100644 --- a/src/api/baseapi.cpp +++ b/src/api/baseapi.cpp @@ -146,11 +146,6 @@ static void ExtractFontName(const char* filename, std::string* fontname) { */ static void addAvailableLanguages(const std::string &datadir, std::vector *langs) { - // Check if directory exists before attempting to iterate - if (!std::filesystem::exists(datadir) || !std::filesystem::is_directory(datadir)) { - return; - } - try { for (const auto& entry : std::filesystem::recursive_directory_iterator(datadir, @@ -162,7 +157,7 @@ static void addAvailableLanguages(const std::string &datadir, } } } catch (const std::filesystem::filesystem_error&) { - // Silently handle filesystem errors (e.g., permission denied, corrupted filesystem) + // Silently handle filesystem errors (e.g., missing directory, corrupted filesystem) // The function will return with whatever languages were found so far } }