Skip to content

Commit 0df584e

Browse files
danplastweil
authored andcommitted
capi: Fix calling delete[] for memory allocated by malloc
1 parent 38c8c76 commit 0df584e

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/api/capi.cpp

+18-14
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,30 @@
1717

1818
#include <tesseract/capi.h>
1919

20-
#include <cstring> // for strdup
21-
2220
const char *TessVersion() {
2321
return TessBaseAPI::Version();
2422
}
2523

24+
static char *MakeText(const std::string& srcText) {
25+
auto *text = new char[srcText.size() + 1];
26+
srcText.copy(text, srcText.size());
27+
text[srcText.size()] = 0;
28+
return text;
29+
}
30+
2631
void TessDeleteText(const char *text) {
2732
delete[] text;
2833
}
2934

35+
static char **MakeTextArray(const std::vector<std::string>& srcArr) {
36+
auto **arr = new char *[srcArr.size() + 1];
37+
for (size_t i = 0; i < srcArr.size(); ++i) {
38+
arr[i] = MakeText(srcArr[i]);
39+
}
40+
arr[srcArr.size()] = nullptr;
41+
return arr;
42+
}
43+
3044
void TessDeleteTextArray(char **arr) {
3145
for (char **pos = arr; *pos != nullptr; ++pos) {
3246
delete[] * pos;
@@ -251,23 +265,13 @@ const char *TessBaseAPIGetInitLanguagesAsString(const TessBaseAPI *handle) {
251265
char **TessBaseAPIGetLoadedLanguagesAsVector(const TessBaseAPI *handle) {
252266
std::vector<std::string> languages;
253267
handle->GetLoadedLanguagesAsVector(&languages);
254-
char **arr = new char *[languages.size() + 1];
255-
for (auto &language : languages) {
256-
arr[&language - &languages[0]] = strdup(language.c_str());
257-
}
258-
arr[languages.size()] = nullptr;
259-
return arr;
268+
return MakeTextArray(languages);
260269
}
261270

262271
char **TessBaseAPIGetAvailableLanguagesAsVector(const TessBaseAPI *handle) {
263272
std::vector<std::string> languages;
264273
handle->GetAvailableLanguagesAsVector(&languages);
265-
char **arr = new char *[languages.size() + 1];
266-
for (auto &language : languages) {
267-
arr[&language - &languages[0]] = strdup(language.c_str());
268-
}
269-
arr[languages.size()] = nullptr;
270-
return arr;
274+
return MakeTextArray(languages);
271275
}
272276

273277
void TessBaseAPIInitForAnalysePage(TessBaseAPI *handle) {

0 commit comments

Comments
 (0)