File icu-CVE-2025-5222-shim04_8067293.patch of Package icu

From 8067293d35c5316b032b254c1419069802538109 Mon Sep 17 00:00:00 2001
From: Markus Scherer <markus.icu@gmail.com>
Date: Sat, 11 Jan 2014 00:28:53 +0000
Subject: [PATCH] ICU-10043 ignore the genrb --omitCollationRules flag while
 importing rules

X-SVN-Rev: 34874
---
 icu4c/source/tools/genrb/genrb.c   |  7 ++++---
 icu4c/source/tools/genrb/parse.cpp | 18 ++++++++----------
 icu4c/source/tools/genrb/parse.h   |  6 +++---
 3 files changed, 15 insertions(+), 16 deletions(-)

--- a/source/tools/genrb/genrb.c
+++ b/source/tools/genrb/genrb.c
@@ -280,7 +280,7 @@
         }
     }
 
-    initParser(options[NO_COLLATION_RULES].doesOccur);
+    initParser();
 
     /*added by Jing*/
     if(options[LANGUAGE].doesOccur) {
@@ -557,7 +557,8 @@
         printf("autodetected encoding %s\n", cp);
     }
     /* Parse the data into an SRBRoot */
-    data = parse(ucbuf, inputDir, outputDir, !omitBinaryCollation, status);
+    data = parse(ucbuf, inputDir, outputDir,
+                 !omitBinaryCollation, options[NO_COLLATION_RULES].doesOccur, status);
 
     if (data == NULL || U_FAILURE(*status)) {
         fprintf(stderr, "couldn't parse the file %s. Error:%s\n", filename,u_errorName(*status));

--- a/source/tools/genrb/parse.cpp
+++ b/source/tools/genrb/parse.cpp
@@ -90,10 +90,9 @@
     const char     *outputdir;
     uint32_t        outputdirLength;
     UBool           makeBinaryCollation;
+    UBool           omitCollationRules;
 } ParseState;
 
-static UBool gOmitCollationRules  = FALSE;
-
 typedef struct SResource *
 ParseResourceFunction(ParseState* state, char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status);
 
@@ -328,7 +327,7 @@
     }
     uprv_strcat(filename, cs);
 
-    if(gOmitCollationRules) {
+    if(state->omitCollationRules) {
         return res_none();
     }
 
@@ -776,7 +775,7 @@
     }
 
     /* Parse the data into an SRBRoot */
-    data = parse(ucbuf, genrbdata->inputDir, genrbdata->outputDir, FALSE, status);
+    data = parse(ucbuf, genrbdata->inputDir, genrbdata->outputDir, FALSE, FALSE, status);
 
     root = data->fRoot;
     collations = resLookup(root, "collations");
@@ -1012,7 +1011,7 @@
 #endif
             /* in order to achieve smaller data files, we can direct genrb */
             /* to omit collation rules */
-            if(gOmitCollationRules) {
+            if(state->omitCollationRules) {
                 bundle_closeString(state->bundle, member);
             } else {
                 table_add(result, member, line, status);
@@ -1844,7 +1843,7 @@
     {"reserved", NULL, NULL}
 };
 
-void initParser(UBool omitCollationRules)
+void initParser()
 {
     U_STRING_INIT(k_type_string,    "string",    6);
     U_STRING_INIT(k_type_binary,    "binary",    6);
@@ -1863,8 +1862,6 @@
     U_STRING_INIT(k_type_plugin_collation,      "process(collation)",        18);
     U_STRING_INIT(k_type_plugin_transliterator, "process(transliterator)",   23);
     U_STRING_INIT(k_type_plugin_dependency,     "process(dependency)",       19);
-
-    gOmitCollationRules = omitCollationRules;
 }
 
 static inline UBool isTable(enum EResourceType type) {
@@ -2044,8 +2041,8 @@
 
 /* parse the top-level resource */
 struct SRBRoot *
-parse(UCHARBUF *buf, const char *inputDir, const char *outputDir, UBool makeBinaryCollation,
-      UErrorCode *status)
+parse(UCHARBUF *buf, const char *inputDir, const char *outputDir,
+      UBool makeBinaryCollation, UBool omitCollationRules, UErrorCode *status)
 {
     struct UString    *tokenValue;
     struct UString    comment;
@@ -2069,6 +2066,7 @@
     state.outputdir       = outputDir;
     state.outputdirLength = (state.outputdir != NULL) ? (uint32_t)uprv_strlen(state.outputdir) : 0;
     state.makeBinaryCollation = makeBinaryCollation;
+    state.omitCollationRules = omitCollationRules;
 
     ustr_init(&comment);
     expect(&state, TOK_STRING, &tokenValue, &comment, NULL, status);
diff -Nura c/source/tools/genrb/parse.h d/source/tools/genrb/parse.h
--- c/source/tools/genrb/parse.h	2013-10-05 04:49:36.000000000 +0800
+++ d/source/tools/genrb/parse.h	2025-06-25 22:16:55.601840816 +0800
@@ -24,11 +24,11 @@
 
 U_CDECL_BEGIN
 /* One time parser initalisation */
-void initParser(UBool omitCollationRules);
+void initParser();
 
 /* Parse a ResourceBundle text file */
 struct SRBRoot* parse(UCHARBUF *buf, const char* inputDir, const char* outputDir,
-                      UBool omitBinaryCollation, UErrorCode *status);
+                      UBool makeBinaryCollation, UBool omitCollationRules, UErrorCode *status);
 
 U_CDECL_END
 
openSUSE Build Service is sponsored by