diff options
-rw-r--r-- | i18nlangtag/source/languagetag/languagetag.cxx | 12 | ||||
-rw-r--r-- | include/i18nlangtag/languagetag.hxx | 3 | ||||
-rw-r--r-- | unotools/source/config/configmgr.cxx | 2 |
3 files changed, 15 insertions, 2 deletions
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx index 28842ccace6d..f9945f10c5c9 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -702,6 +702,14 @@ void LanguageTag::setConfiguredSystemLanguage( LanguageType nLang ) aLanguageTag.registerImpl(); } +static bool lt_tag_parse_disabled = false; + +// static +void LanguageTag::disable_lt_tag_parse() +{ + lt_tag_parse_disabled = true; +} + static bool lcl_isKnownOnTheFlyID( LanguageType nLang ) { return nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM && @@ -1197,7 +1205,7 @@ bool LanguageTagImpl::canonicalize() myLtError aError; - if (lt_tag_parse( mpImplLangtag, OUStringToOString( maBcp47, RTL_TEXTENCODING_UTF8).getStr(), &aError.p)) + if (!lt_tag_parse_disabled && lt_tag_parse(mpImplLangtag, OUStringToOString(maBcp47, RTL_TEXTENCODING_UTF8).getStr(), &aError.p)) { char* pTag = lt_tag_canonicalize( mpImplLangtag, &aError.p); SAL_WARN_IF( !pTag, "i18nlangtag", "LanguageTagImpl::canonicalize: could not canonicalize '" << maBcp47 << "'"); @@ -2809,7 +2817,7 @@ bool LanguageTag::isValidBcp47( const OUString& rString, OUString* o_pCanonicali myLtError aError; - if (lt_tag_parse( aVar.mpLangtag, OUStringToOString( rString, RTL_TEXTENCODING_UTF8).getStr(), &aError.p)) + if (!lt_tag_parse_disabled && lt_tag_parse(aVar.mpLangtag, OUStringToOString(rString, RTL_TEXTENCODING_UTF8).getStr(), &aError.p)) { char* pTag = lt_tag_canonicalize( aVar.mpLangtag, &aError.p); SAL_WARN_IF( !pTag, "i18nlangtag", "LanguageTag:isValidBcp47: could not canonicalize '" << rString << "'"); diff --git a/include/i18nlangtag/languagetag.hxx b/include/i18nlangtag/languagetag.hxx index a9937205ef8c..f337d147b414 100644 --- a/include/i18nlangtag/languagetag.hxx +++ b/include/i18nlangtag/languagetag.hxx @@ -528,6 +528,9 @@ public: /** @ATTENTION: _ONLY_ to be called by the application's configuration! */ static void setConfiguredSystemLanguage( LanguageType nLang ); + /** @ATTENTION: _ONLY_ to be called by fuzzing setup */ + static void disable_lt_tag_parse(); + typedef std::shared_ptr< LanguageTagImpl > ImplPtr; private: diff --git a/unotools/source/config/configmgr.cxx b/unotools/source/config/configmgr.cxx index 417bfc311bbf..1f83a94830d2 100644 --- a/unotools/source/config/configmgr.cxx +++ b/unotools/source/config/configmgr.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/uno/Any.hxx> #include <com/sun/star/uno/Reference.hxx> #include <com/sun/star/uno/Sequence.hxx> +#include <i18nlangtag/languagetag.hxx> #include <rtl/instance.hxx> #include <rtl/ustring.h> #include <rtl/ustring.hxx> @@ -205,6 +206,7 @@ bool utl::ConfigManager::IsFuzzing() void utl::ConfigManager::EnableFuzzing() { bIsFuzzing = true; + LanguageTag::disable_lt_tag_parse(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |