Skip to content

Commit

Permalink
Test for correct locale settings
Browse files Browse the repository at this point in the history
Normal C++ programs like those which are built for tesseract automatically
set the locale "C".

There can be different locale settings if the tesseract library is used
in other software.

A wrong locale can cause wrong results from sscanf which is used at
different places in the tesseract code, so make sure that we have the
right locale settings and fail if that is not the case.

Signed-off-by: Stefan Weil <[email protected]>
  • Loading branch information
stweil committed Jun 8, 2018
1 parent a662306 commit 3292484
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/api/baseapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#endif // _WIN32

#include <algorithm>
#include <clocale>
#include <fstream>
#include <iostream>
#include <iterator>
Expand Down Expand Up @@ -185,7 +186,15 @@ TessBaseAPI::TessBaseAPI()
rect_width_(0),
rect_height_(0),
image_width_(0),
image_height_(0) {}
image_height_(0) {
const char *locale;
locale = std::setlocale(LC_ALL, nullptr);
ASSERT_HOST(!strcmp(locale, "C"));
locale = std::setlocale(LC_CTYPE, nullptr);
ASSERT_HOST(!strcmp(locale, "C"));
locale = std::setlocale(LC_NUMERIC, nullptr);
ASSERT_HOST(!strcmp(locale, "C"));
}

TessBaseAPI::~TessBaseAPI() {
End();
Expand Down

0 comments on commit 3292484

Please sign in to comment.