i18npool/CppunitTest_i18npool_transliteration.mk       |    2 
 i18npool/inc/textToPronounce_zh.hxx                    |    4 
 i18npool/qa/cppunit/transliteration.cxx                |  224 +++++++++++------
 i18npool/source/transliteration/textToPronounce_zh.cxx |   19 -
 4 files changed, 161 insertions(+), 88 deletions(-)

New commits:
commit 852af3af0dde3810e323afc3d42d7bd1cd4e67bc
Author:     Stephan Bergmann <[email protected]>
AuthorDate: Wed Apr 12 22:15:04 2023 +0200
Commit:     Stephan Bergmann <[email protected]>
CommitDate: Thu Apr 13 08:23:59 2023 +0200

    Fix UBSan function-type-mismatch
    
    ...as seen with the additions to CppunitTest_i18npool_transliteration made 
here,
    
    > i18npool/source/transliteration/textToPronounce_zh.cxx:175:17: runtime 
error: call to function get_zh_zhuyin through pointer to incorrect function 
type 'unsigned short **(*)()'
    > workdir/CustomTarget/i18npool/indexentry/zh_zhuyin.cxx:1512: note: 
get_zh_zhuyin defined here
    >  #0 in i18npool::TextToPronounce_zh::TextToPronounce_zh(char const*) at 
i18npool/source/transliteration/textToPronounce_zh.cxx:175:17
    >  #1 in i18npool::TextToChuyin_zh_TW::TextToChuyin_zh_TW() at 
i18npool/source/transliteration/textToPronounce_zh.cxx:149:5
    >  #2 in 
TextToChuyin_zh_TW_CreateInstance(com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory>
 const&) at i18npool/source/registerservices/registerservices.cxx:236:1
    >  #3 in cppu::(anonymous 
namespace)::OFactoryComponentHelper::createInstanceEveryTime(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
 const&) at cppuhelper/source/factory.cxx:173:24
    >  #4 in cppu::(anonymous 
namespace)::OFactoryComponentHelper::createInstanceWithContext(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
 const&) at cppuhelper/source/factory.cxx:230:12
    >  #5 in non-virtual thunk to cppu::(anonymous 
namespace)::OFactoryComponentHelper::createInstanceWithContext(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
 const&) at cppuhelper/source/factory.cxx
    >  #6 in 
cppuhelper::ServiceManager::Data::Implementation::doCreateInstance(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
 const&) at cppuhelper/source/servicemanager.cxx:709:26
    >  #7 in 
cppuhelper::ServiceManager::Data::Implementation::createInstance(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>
 const&, bool) at cppuhelper/source/servicemanager.cxx:675:16
    >  #8 in 
cppuhelper::ServiceManager::createInstanceWithContext(rtl::OUString const&, 
com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&) 
at cppuhelper/source/servicemanager.cxx:1006:36
    >  #9 in non-virtual thunk to 
cppuhelper::ServiceManager::createInstanceWithContext(rtl::OUString const&, 
com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&) 
at cppuhelper/source/servicemanager.cxx
    >  #10 in i18npool::TransliterationImpl::loadBody(rtl::OUString const&, 
com::sun::star::uno::Reference<com::sun::star::i18n::XExtendedTransliteration>&)
 at i18npool/source/transliteration/transliterationImpl.cxx:619:45
    >  #11 in 
i18npool::TransliterationImpl::loadModuleByName(std::basic_string_view<char16_t,
 std::char_traits<char16_t>>, 
com::sun::star::uno::Reference<com::sun::star::i18n::XExtendedTransliteration>&,
 com::sun::star::lang::Locale const&) at 
i18npool/source/transliteration/transliterationImpl.cxx:630:5
    >  #12 in i18npool::TransliterationImpl::loadModuleByImplName(rtl::OUString 
const&, com::sun::star::lang::Locale const&) at 
i18npool/source/transliteration/transliterationImpl.cxx:278:9
    >  #13 in (anonymous namespace)::Transliteration::testTextToChuyin_zh_TW() 
at i18npool/qa/cppunit/transliteration.cxx:120:27
    
    For one, there had always been a mismatch between the return type `const
    sal_uInt16**` generated in i18npool/source/indexentry/genindex_data.cxx 
since
    d319c4611e932b286c0bef14387382da0f2e92d2 "INTEGRATION: CWS i18n24 (1.1.2); 
FILE
    ADDED" vs. `sal_uInt16**` used in
    i18npool/source/transliteration/textToPronounce_zh.cxx since
    f4705bf0a3efeebfe74568abb355ad60621300dd "INTEGRATION: CWS i18n24 (1.8.36); 
FILE
    MERGED".
    
    And for another (and more severe, as it caused random writes), there had 
also
    been a mismatch between the parameters `(sal_Int16 &max_index)` newly 
generated
    in i18npool/source/indexentry/genindex_data.cxx since
    7696cd3902ca248951205f15930787488368ea26 "INTEGRATION: CWS i18n31 (1.4.60); 
FILE
    MERGED" (and correctly used in
    i18npool/source/indexentry/indexentrysupplier_asian.cxx since
    58dcf0ffaf8668827fc2f47445c9d8faf3d29555 "INTEGRATION: CWS i18n31 (1.9.60); 
FILE
    MERGED") vs. the original `()` used in
    i18npool/source/transliteration/textToPronounce_zh.cxx ever since
    f4705bf0a3efeebfe74568abb355ad60621300dd "INTEGRATION: CWS i18n24 (1.8.36); 
FILE
    MERGED".
    
    For DISABLE_DYNLOADING, the second (missing max_index parameter) issue 
appears
    to have been broken even further with 
9db03b879b912d79060ab06f03a54d4a59e6ac65
    "i18npool: fix wrong static function symbols", replacing the wrong
    
        sal_uInt16** get_zh_zhuyin();
        sal_uInt16** get_zh_pinyin();
    
    declarations in i18npool/source/transliteration/textToPronounce_zh.cxx with 
the
    even worse declarations
    
        sal_uInt16** get_collator_data_zh_zhuyin();
        sal_uInt16** get_collator_data_zh_pinyin();
    
    corresponding to function definitions generated by
    i18npool/source/collator/gencoll_rule.cxx (which also happen to have zero
    parameters, but non-matching return types, and apparently completely 
different
    collation vs. transliteration semantics).
    
    Change-Id: Id91b17eeb7fcdd0c711d52a624375356dc47fc32
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150302
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <[email protected]>

diff --git a/i18npool/CppunitTest_i18npool_transliteration.mk 
b/i18npool/CppunitTest_i18npool_transliteration.mk
index 37dddcda0ae2..6c9f71916fef 100644
--- a/i18npool/CppunitTest_i18npool_transliteration.mk
+++ b/i18npool/CppunitTest_i18npool_transliteration.mk
@@ -27,4 +27,6 @@ $(eval $(call 
gb_CppunitTest_use_sdk_api,i18npool_transliteration))
 
 $(eval $(call gb_CppunitTest_use_ure,i18npool_transliteration))
 
+$(call gb_CppunitTest_get_target,i18npool_transliteration): $(call 
gb_Library_get_target,index_data)
+
 # vim: set noet sw=4 ts=4:
diff --git a/i18npool/inc/textToPronounce_zh.hxx 
b/i18npool/inc/textToPronounce_zh.hxx
index 2ac854abddbd..b34398e608f8 100644
--- a/i18npool/inc/textToPronounce_zh.hxx
+++ b/i18npool/inc/textToPronounce_zh.hxx
@@ -30,14 +30,14 @@ protected:
 #ifndef DISABLE_DYNLOADING
         oslModule hModule;
 #endif
-        sal_uInt16 **idx;
+        sal_uInt16 const **idx;
         const sal_Unicode* getPronounce(const sal_Unicode ch);
 
 public:
 #ifndef DISABLE_DYNLOADING
         TextToPronounce_zh(const char* func_name);
 #else
-        TextToPronounce_zh(sal_uInt16 ** (*function)());
+        TextToPronounce_zh(sal_uInt16 const ** (*function)(sal_Int16 &));
 #endif
         virtual ~TextToPronounce_zh() override;
 
diff --git a/i18npool/qa/cppunit/transliteration.cxx 
b/i18npool/qa/cppunit/transliteration.cxx
index 712a3c02244a..cc8eccfbb5c2 100644
--- a/i18npool/qa/cppunit/transliteration.cxx
+++ b/i18npool/qa/cppunit/transliteration.cxx
@@ -15,6 +15,8 @@
 
 #include <com/sun/star/i18n/Transliteration.hpp>
 #include <com/sun/star/i18n/TransliterationModulesNew.hpp>
+#include <com/sun/star/i18n/XExtendedTransliteration.hpp>
+#include <com/sun/star/uno/Reference.hxx>
 #include <cppuhelper/bootstrap.hxx>
 
 namespace
@@ -22,96 +24,164 @@ namespace
 class Transliteration : public CppUnit::TestFixture
 {
 public:
-    void testLoadModuleNew()
+    void setUp()
     {
-        auto const trans
+        transliteration_
             = 
css::i18n::Transliteration::create(cppu::defaultBootstrap_InitialComponentContext());
+    }
+
+    void testLoadModuleNew()
+    {
         // Verify that loading succeeds without throwing an exception, for 
each possible
         // TransliterationModulesNew value (TODO: there is an upper limit of 
maxCascade 27 in
         // i18npool/inc/transliterationImpl.hxx for the length of the passed
         // TransliterationModulesNew value, so pass each one individually 
rather than all 65 at
         // once):
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_UPPERCASE_LOWERCASE }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_LOWERCASE_UPPERCASE }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_HALFWIDTH_FULLWIDTH }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_FULLWIDTH_HALFWIDTH }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_KATAKANA_HIRAGANA }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_HIRAGANA_KATAKANA }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_CASE }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_KANA }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_WIDTH }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTraditionalKanji_ja_JP },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTraditionalKana_ja_JP },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreMinusSign_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreIterationMark_ja_JP },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSeparator_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreZiZu_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreBaFa_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTiJi_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreHyuByu_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSeZe_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreIandEfollowedByYa_ja_JP },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreKiKuFollowedBySa_ja_JP },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSize_ja_JP }, {});
-        trans->loadModuleNew(
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_UPPERCASE_LOWERCASE }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_LOWERCASE_UPPERCASE }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_HALFWIDTH_FULLWIDTH }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_FULLWIDTH_HALFWIDTH }, {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_KATAKANA_HIRAGANA },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_HIRAGANA_KATAKANA },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_CASE }, {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_KANA }, {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_WIDTH }, {});
+        transliteration_->loadModuleNew(
+            { 
css::i18n::TransliterationModulesNew_IgnoreTraditionalKanji_ja_JP }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_IgnoreTraditionalKana_ja_JP 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_IgnoreMinusSign_ja_JP }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_IgnoreIterationMark_ja_JP 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_IgnoreSeparator_ja_JP }, 
{});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreZiZu_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreBaFa_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTiJi_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreHyuByu_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSeZe_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew(
+            { 
css::i18n::TransliterationModulesNew_IgnoreIandEfollowedByYa_ja_JP }, {});
+        transliteration_->loadModuleNew(
+            { 
css::i18n::TransliterationModulesNew_IgnoreKiKuFollowedBySa_ja_JP }, {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSize_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew(
             { 
css::i18n::TransliterationModulesNew_IgnoreProlongedSoundMark_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreMiddleDot_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSpace_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_SmallToLarge_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_LargeToSmall_ja_JP }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextLower_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextUpper_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextLower_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextUpper_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextFormalHangul_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextFormalLower_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextFormalUpper_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextInformalHangul_ko },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextInformalLower_ko },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextInformalUpper_ko },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharHangul_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharFullwidth }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharKanjiShort_ja_JP },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumLower_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumUpper_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumLower_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumUpper_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumFormalHangul_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumFormalLower_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumFormalUpper_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumInformalHangul_ko },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumInformalLower_ko },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumInformalUpper_ko },
-                             {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumLower_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_zh_CN }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumLower_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_zh_TW }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumHangul_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumLower_ko }, {});
-        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_ko }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_IgnoreMiddleDot_ja_JP }, 
{});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSpace_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_SmallToLarge_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_LargeToSmall_ja_JP },
+                                        {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextLower_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextUpper_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextLower_zh_TW }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextUpper_zh_TW }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextFormalHangul_ko }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextFormalLower_ko }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextFormalUpper_ko }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextInformalHangul_ko 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextInformalLower_ko 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToTextInformalUpper_ko 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToCharLower_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToCharUpper_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToCharLower_zh_TW }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToCharUpper_zh_TW }, {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharHangul_ko },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_ko },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_ko },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharFullwidth },
+                                        {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_NumToCharKanjiShort_ja_JP 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumLower_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumUpper_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumLower_zh_TW }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumUpper_zh_TW }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumFormalHangul_ko }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumFormalLower_ko }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumFormalUpper_ko }, 
{});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumInformalHangul_ko 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumInformalLower_ko 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_TextToNumInformalUpper_ko 
}, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_CharToNumLower_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_CharToNumUpper_zh_CN }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_CharToNumLower_zh_TW }, {});
+        transliteration_->loadModuleNew(
+            { css::i18n::TransliterationModulesNew_CharToNumUpper_zh_TW }, {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumHangul_ko },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumLower_ko },
+                                        {});
+        transliteration_->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_ko },
+                                        {});
+    }
+
+    void testTextToChuyin_zh_TW()
+    {
+        // Verify that loading succeeds:
+        transliteration_->loadModuleByImplName("TextToChuyin_zh_TW", {});
+    }
+
+    void testTextToPinyin_zh_CN()
+    {
+        // Verify that loading succeeds:
+        transliteration_->loadModuleByImplName("TextToPinyin_zh_CN", {});
     }
 
     CPPUNIT_TEST_SUITE(Transliteration);
     CPPUNIT_TEST(testLoadModuleNew);
+    CPPUNIT_TEST(testTextToChuyin_zh_TW);
+    CPPUNIT_TEST(testTextToPinyin_zh_CN);
     CPPUNIT_TEST_SUITE_END();
+
+private:
+    css::uno::Reference<css::i18n::XExtendedTransliteration> transliteration_;
 };
 
 CPPUNIT_TEST_SUITE_REGISTRATION(Transliteration);
diff --git a/i18npool/source/transliteration/textToPronounce_zh.cxx 
b/i18npool/source/transliteration/textToPronounce_zh.cxx
index 7848c935cfab..8d6b3e3e81a3 100644
--- a/i18npool/source/transliteration/textToPronounce_zh.cxx
+++ b/i18npool/source/transliteration/textToPronounce_zh.cxx
@@ -21,6 +21,7 @@
 
 #include <com/sun/star/i18n/MultipleCharsOutputException.hpp>
 #include <com/sun/star/i18n/TransliterationType.hpp>
+#include <o3tl/temporary.hxx>
 #include <rtl/ustring.hxx>
 #include <rtl/ustrbuf.hxx>
 
@@ -43,7 +44,7 @@ TextToPronounce_zh::getPronounce(const sal_Unicode ch)
     if (idx) {
         sal_uInt16 address = idx[0][ch>>8];
         if (address != 0xFFFF)
-            return reinterpret_cast<sal_Unicode *>(
+            return reinterpret_cast<sal_Unicode const *>(
                 &idx[2][idx[1][address + (ch & 0xFF)]]);
     }
     return emptyString;
@@ -126,8 +127,8 @@ TextToPronounce_zh::equals( const OUString & str1, 
sal_Int32 pos1, sal_Int32 nCo
 
 extern "C" {
 
-sal_uInt16** get_collator_data_zh_zhuyin();
-sal_uInt16** get_collator_data_zh_pinyin();
+sal_uInt16 const ** get_zh_zhuyin(sal_Int16 & max_index);
+sal_uInt16 const ** get_zh_pinyin(sal_Int16 & max_index);
 
 }
 
@@ -137,7 +138,7 @@ TextToPinyin_zh_CN::TextToPinyin_zh_CN() :
 #ifndef DISABLE_DYNLOADING
     TextToPronounce_zh("get_zh_pinyin")
 #else
-    TextToPronounce_zh(get_collator_data_zh_pinyin)
+    TextToPronounce_zh(get_zh_pinyin)
 #endif
 {
         transliterationName = "ChineseCharacterToPinyin";
@@ -148,7 +149,7 @@ TextToChuyin_zh_TW::TextToChuyin_zh_TW() :
 #ifndef DISABLE_DYNLOADING
     TextToPronounce_zh("get_zh_zhuyin")
 #else
-    TextToPronounce_zh(get_collator_data_zh_zhuyin)
+    TextToPronounce_zh(get_zh_zhuyin)
 #endif
 {
         transliterationName = "ChineseCharacterToChuyin";
@@ -170,17 +171,17 @@ TextToPronounce_zh::TextToPronounce_zh(const char* 
func_name)
         &thisModule, lib.pData, SAL_LOADMODULE_DEFAULT );
     idx=nullptr;
     if (hModule) {
-        sal_uInt16** (*function)() = reinterpret_cast<sal_uInt16** 
(*)()>(osl_getFunctionSymbol(hModule, 
OUString::createFromAscii(func_name).pData));
+        sal_uInt16 const ** (*function)(sal_Int16 &) = 
reinterpret_cast<sal_uInt16 const ** (*)(sal_Int16 
&)>(osl_getFunctionSymbol(hModule, OUString::createFromAscii(func_name).pData));
         if (function)
-            idx=function();
+            idx=function(o3tl::temporary(sal_Int16()));
     }
 }
 
 #else
 
-TextToPronounce_zh::TextToPronounce_zh(sal_uInt16 ** (*function)())
+TextToPronounce_zh::TextToPronounce_zh(sal_uInt16 const ** 
(*function)(sal_Int16 &))
 {
-    idx = function();
+    idx = function(o3tl::temporary(sal_Int16()));
 }
 
 #endif

Reply via email to