external/liblangtag/UnpackedTarball_langtag.mk | 3 +++ external/liblangtag/liblangtag-leak.patch.0 | 10 ++++++++++ i18nlangtag/source/languagetag/languagetag.cxx | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-)
New commits: commit 0fe40023df5d28a46bea5632835f65e11e1954c0 Author: Stephan Bergmann <sberg...@redhat.com> Date: Mon May 26 14:25:58 2014 +0200 Fix refcounting Change-Id: I2225b2a2dc0648ec3b9e2af251cd1a3502199383 diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx index 8a96bde..483cf98 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -429,8 +429,10 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa maCachedScript = rLanguageTagImpl.maCachedScript; maCachedCountry = rLanguageTagImpl.maCachedCountry; maCachedVariants = rLanguageTagImpl.maCachedVariants; + lt_tag_t * oldTag = mpImplLangtag; mpImplLangtag = rLanguageTagImpl.mpImplLangtag ? lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : NULL; + lt_tag_unref(oldTag); mnLangID = rLanguageTagImpl.mnLangID; meIsValid = rLanguageTagImpl.meIsValid; meIsIsoLocale = rLanguageTagImpl.meIsIsoLocale; @@ -444,8 +446,10 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa mbCachedScript = rLanguageTagImpl.mbCachedScript; mbCachedCountry = rLanguageTagImpl.mbCachedCountry; mbCachedVariants = rLanguageTagImpl.mbCachedVariants; - if (mpImplLangtag) + if (mpImplLangtag && !oldTag) theDataRef::get().incRef(); + else if (!mpImplLangtag && oldTag) + theDataRef::get().decRef(); return *this; } commit f5d90767d199baeaf61706ecd52f29a34f96b62c Author: Stephan Bergmann <sberg...@redhat.com> Date: Mon May 26 14:25:26 2014 +0200 external/liblangtag: Fix memory leak Change-Id: I7d58c1aad5ec21f14569caedbada56cc31a5ff99 diff --git a/external/liblangtag/UnpackedTarball_langtag.mk b/external/liblangtag/UnpackedTarball_langtag.mk index 90068cb..2951368 100644 --- a/external/liblangtag/UnpackedTarball_langtag.mk +++ b/external/liblangtag/UnpackedTarball_langtag.mk @@ -15,6 +15,8 @@ $(eval $(call gb_UnpackedTarball_set_pre_action,langtag,\ $(GNUTAR) -x -j -f $(gb_UnpackedTarget_TARFILE_LOCATION)/$(LANGTAGREG_TARBALL) \ )) +# external/liblangtag/liblangtag-leak.patch.0 upstream: +# <https://bitbucket.org/tagoh/liblangtag/pull-request/8/fix-memory-leak/diff> $(eval $(call gb_UnpackedTarball_add_patches,langtag,\ external/liblangtag/liblangtag-0.5.1-msvc-warning.patch \ external/liblangtag/liblangtag-0.5.1-vsnprintf.patch \ @@ -27,6 +29,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,langtag,\ external/liblangtag/liblangtag-0.5.1-windows-do-not-prepend-dir-separator.patch \ external/liblangtag/liblangtag-0.5.1-unistd.patch \ external/liblangtag/liblangtag-0.5.1-include-last-record-in-language-subtag-registry.patch \ + external/liblangtag/liblangtag-leak.patch.0 \ )) ifeq ($(OS),WNT) diff --git a/external/liblangtag/liblangtag-leak.patch.0 b/external/liblangtag/liblangtag-leak.patch.0 new file mode 100644 index 0000000..4a74d68 --- /dev/null +++ b/external/liblangtag/liblangtag-leak.patch.0 @@ -0,0 +1,10 @@ +--- liblangtag/lt-tag.c ++++ liblangtag/lt-tag.c +@@ -1408,6 +1408,7 @@ + lt_variant_ref(lt_list_value(l)), + (lt_destroy_func_t)lt_variant_unref); + } ++ lt_mem_add_ref(&retval->parent, retval->variants, lt_list_free); + } + if (tag->extension) { + lt_tag_set_extension(retval, lt_extension_copy(tag->extension)); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits