diff options
Diffstat (limited to 'package/icu/icu-overflow.patch')
-rw-r--r-- | package/icu/icu-overflow.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/package/icu/icu-overflow.patch b/package/icu/icu-overflow.patch new file mode 100644 index 000000000..45beaa7ea --- /dev/null +++ b/package/icu/icu-overflow.patch @@ -0,0 +1,93 @@ + +A combination of issue & patches from... + +https://bugs.icu-project.org/trac/ticket/7680 +https://bugs.icu-project.org/trac/changeset/28002 +https://bugs.icu-project.org/trac/changeset/28124 + +Enlarged buffers more since include files for pkgdata can grow +significantly when cross-compiling. +This ONLY affects building. + +Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> + +diff -Nura icu.orig/source/tools/pkgdata/pkgdata.cpp icu/source/tools/pkgdata/pkgdata.cpp +--- icu.orig/source/tools/pkgdata/pkgdata.cpp 2010-09-29 15:37:28.000000000 -0300 ++++ icu/source/tools/pkgdata/pkgdata.cpp 2010-12-21 15:53:30.252554924 -0300 +@@ -97,8 +97,9 @@ + #define PKGDATA_FILE_SEP_STRING U_FILE_SEP_STRING + #endif + +-#define LARGE_BUFFER_MAX_SIZE 2048 +-#define SMALL_BUFFER_MAX_SIZE 512 ++#define LARGE_BUFFER_MAX_SIZE 8192 ++#define MEDIUM_BUFFER_MAX_SIZE 4096 ++#define SMALL_BUFFER_MAX_SIZE 2048 + + static void loadLists(UPKGOptions *o, UErrorCode *status); + +@@ -472,29 +473,48 @@ + } + + static int runCommand(const char* command, UBool specialHandling) { +- char cmd[SMALL_BUFFER_MAX_SIZE]; ++ char *cmd = NULL; ++ char cmdBuffer[SMALL_BUFFER_MAX_SIZE]; ++ int32_t len = strlen(command); ++ ++ if (len == 0) { ++ return 0; ++ } + + if (!specialHandling) { ++#if defined(USING_CYGWIN) || defined(OS400) ++#define CMD_PADDING_SIZE 20 ++ if ((len + CMD_PADDING_SIZE) >= SMALL_BUFFER_MAX_SIZE) { ++ cmd = (char *)uprv_malloc(len + CMD_PADDING_SIZE); ++ } else { ++ cmd = cmdBuffer; ++ } + #ifdef USING_CYGWIN + sprintf(cmd, "bash -c \"%s\"", command); + + #elif defined(OS400) + sprintf(cmd, "QSH CMD('%s')", command); ++#endif + #else + goto normal_command_mode; + #endif + } else { + normal_command_mode: +- sprintf(cmd, "%s", command); ++ cmd = (char *)command; + } +- ++ + printf("pkgdata: %s\n", cmd); + int result = system(cmd); +- if (result != 0) { +- printf("-- return status = %d\n", result); ++ if (result != 0) { ++ printf("-- return status = %d\n", result); ++ } ++ ++ if (cmd != cmdBuffer && cmd != command) { ++ uprv_free(cmd); + } +- return result; +-} ++ ++ return result; ++} + + #define LN_CMD "ln -s" + #define RM_CMD "rm -f" +@@ -586,7 +606,7 @@ + pkgDataFlags = (char**)uprv_malloc(sizeof(char*) * PKGDATA_FLAGS_SIZE); + if (pkgDataFlags != NULL) { + for (int32_t i = 0; i < PKGDATA_FLAGS_SIZE; i++) { +- pkgDataFlags[i] = (char*)uprv_malloc(sizeof(char) * SMALL_BUFFER_MAX_SIZE); ++ pkgDataFlags[i] = (char*)uprv_malloc(sizeof(char) * MEDIUM_BUFFER_MAX_SIZE); + if (pkgDataFlags[i] != NULL) { + pkgDataFlags[i][0] = 0; + } else { |