summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp')
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp b/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
index c90dafa4e01..ce14022bfc1 100644
--- a/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
@@ -327,6 +327,9 @@ bool fixLine(int /*no*/, std::string &linestr) {
// start from the end and find all u" cases
size_t pos = len = linestr.size();
+ if(len>INT32_MAX/2) {
+ return true;
+ }
while((pos>0) && (pos = linestr.rfind("u\"", pos)) != std::string::npos) {
//printf("found doublequote at %d\n", pos);
if(fixAt(linestr, pos)) return true;
@@ -391,15 +394,19 @@ int convert(const std::string &infile, const std::string &outfile) {
while( getline( inf, linestr)) {
no++;
if(fixLine(no, linestr)) {
- outf.close();
- fprintf(stderr, "%s:%d: Fixup failed by %s\n", infile.c_str(), no, prog.c_str());
- cleanup(outfile);
- return 1;
+ goto fail;
}
outf << linestr << '\n';
}
- return 0;
+ if(inf.eof()) {
+ return 0;
+ }
+fail:
+ outf.close();
+ fprintf(stderr, "%s:%d: Fixup failed by %s\n", infile.c_str(), no, prog.c_str());
+ cleanup(outfile);
+ return 1;
}
/**