Hello community, here is the log from the commit of package libreoffice for openSUSE:Factory checked in at 2016-03-18 21:30:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libreoffice (Old) and /work/SRC/openSUSE:Factory/.libreoffice.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libreoffice" Changes: -------- --- /work/SRC/openSUSE:Factory/libreoffice/libreoffice.changes 2016-03-11 09:38:03.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.libreoffice.new/libreoffice.changes 2016-03-18 21:30:54.000000000 +0100 @@ -1,0 +2,17 @@ +Fri Mar 11 20:41:35 UTC 2016 - tchva...@suse.com + +- Add patch to detect boost_filesystem headers: + * 0002-boost-filesystem1.patch + * 0003-boost-filesystem2.patch +- Add patch to fix rounding bug in test on i586: + * libreoffice-hotfix-disablebrokenshapetest.patch + +------------------------------------------------------------------- +Fri Mar 11 17:17:22 UTC 2016 - tchva...@suse.com + +- Version update to 5.1.1.3: + * Various bugfixes for the first bugfix release of 5.1 +- Update patch to build on sle11 + * 0001-liborcus-0.11.patch + +------------------------------------------------------------------- Old: ---- 5c0c9ac0996fbb4a0e17780ff5441959-graphite2-minimal-1.3.4.tgz liborcus-0.9.2.tar.gz libreoffice-5.1.0.3.tar.xz libreoffice-help-5.1.0.3.tar.xz libreoffice-translations-5.1.0.3.tar.xz New: ---- 0002-boost-filesystem1.patch 0003-boost-filesystem2.patch 17df8301bcc459e83f8a8f3aca6183b2-graphite-minimal-1.3.6.tgz liborcus-0.11.0.tar.gz libreoffice-5.1.1.3.tar.xz libreoffice-help-5.1.1.3.tar.xz libreoffice-hotfix-disablebrokenshapetest.patch libreoffice-translations-5.1.1.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libreoffice.spec ++++++ --- /var/tmp/diff_new_pack.G0aq8Z/_old 2016-03-18 21:31:14.000000000 +0100 +++ /var/tmp/diff_new_pack.G0aq8Z/_new 2016-03-18 21:31:14.000000000 +0100 @@ -22,7 +22,7 @@ %define numbertext_version 0.9.5 # Urls %define external_url http://dev-www.libreoffice.org/src/ -%define tarball_url http://download.documentfoundation.org/libreoffice/src/5.1.0 +%define tarball_url http://download.documentfoundation.org/libreoffice/src/5.1.1 # Old Make and bundle or not %if 0%{?suse_version} > 1230 %bcond_with oldmake @@ -64,7 +64,7 @@ %endif # This is used due to the need for beta releases Name: libreoffice -Version: 5.1.0.3 +Version: 5.1.1.3 Release: 0 Summary: A Free Office Suite (Framework) License: Apache-2.0 and Artistic-1.0 and BSD-3-Clause and BSD-4-Clause and GPL-2.0+ and LPPL-1.3c and LGPL-2.1+ and LGPL-3.0 and MPL-1.1 and MIT and SUSE-Public-Domain and W3C @@ -124,8 +124,8 @@ Source2029: %{external_url}/3941e9cab2f4f9d8faee3e8d57ae7664-glew-1.12.0.zip Source2030: %{external_url}/bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip Source2031: %{external_url}/c4a2d71ff56aec5ebfab2a3f059be99d-icu4c-56_1-src.tgz -Source2032: %{external_url}/5c0c9ac0996fbb4a0e17780ff5441959-graphite2-minimal-1.3.4.tgz -Source2033: %{external_url}/liborcus-0.9.2.tar.gz +Source2032: %{external_url}/17df8301bcc459e83f8a8f3aca6183b2-graphite-minimal-1.3.6.tgz +Source2033: %{external_url}/liborcus-0.11.0.tar.gz Source2034: %{external_url}/harfbuzz-0.9.40.tar.bz2 Source2035: %{external_url}/32f8e1417a64d3c6f2c727f9053f55ea-redland-1.0.16.tar.gz Source2036: %{external_url}/10d61fbaa6a06348823651b1bd7940fe-libexttextcat-3.4.4.tar.bz2 @@ -177,6 +177,10 @@ Patch11: 0001-Fix-python2-build-of-pyuno-with-older-py2-versions.patch Patch12: 0001-mdds-1.0.patch Patch13: 0001-liborcus-0.11.patch +Patch14: 0002-boost-filesystem1.patch +Patch15: 0003-boost-filesystem2.patch +# PATCH-HOTFIX-UPSTREAM: disable test that rounds wrongly on most archs +Patch16: libreoffice-hotfix-disablebrokenshapetest.patch # PATCH-FIX-SUSE: disable services unittest that fails Patch10: libreoffice-disable-services-check.patch # try to save space by using hardlinks @@ -1046,6 +1050,9 @@ %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 %if 0%{?suse_version} < 1130 %patch10 -p1 %endif @@ -1591,6 +1598,14 @@ %dir %{_datadir}/icons/hicolor/512x512 %dir %{_datadir}/icons/hicolor/512x512/apps %dir %{_datadir}/icons/hicolor/512x512/mimetypes +# FIXME: this is KDE4 only, wipe? +%dir %{_datadir}/icons/locolor +%dir %{_datadir}/icons/locolor/16x16 +%dir %{_datadir}/icons/locolor/16x16/apps +%dir %{_datadir}/icons/locolor/16x16/mimetypes +%dir %{_datadir}/icons/locolor/32x32 +%dir %{_datadir}/icons/locolor/32x32/apps +%dir %{_datadir}/icons/locolor/32x32/mimetypes %if %{with newmedia} %files -n libreofficekit ++++++ 0001-liborcus-0.11.patch ++++++ ++++ 1821 lines (skipped) ++++ between /work/SRC/openSUSE:Factory/libreoffice/0001-liborcus-0.11.patch ++++ and /work/SRC/openSUSE:Factory/.libreoffice.new/0001-liborcus-0.11.patch ++++++ 0002-boost-filesystem1.patch ++++++ >From ed41a33ca22f46b123df4132d376247682af07af Mon Sep 17 00:00:00 2001 From: David Tardon <dtar...@redhat.com> Date: Tue, 8 Mar 2016 06:23:24 +0100 Subject: detect Boost.Filesystem Change-Id: I86c268f49f44bd1e208a9de781a16bf19450c64c diff --git a/config_host.mk.in b/config_host.mk.in index 89081ca..0a2ec0b 100644 --- a/config_host.mk.in +++ b/config_host.mk.in @@ -37,6 +37,7 @@ export BARCODE_EXTENSION_PACK=@BARCODE_EXTENSION_PACK@ export BOOST_CPPFLAGS=@BOOST_CPPFLAGS@ export BOOST_CXXFLAGS=@BOOST_CXXFLAGS@ export BOOST_DATE_TIME_LIB=@BOOST_DATE_TIME_LIB@ +export BOOST_FILESYSTEM_LIB=@BOOST_FILESYSTEM_LIB@ export BOOST_IOSTREAMS_LIB=@BOOST_IOSTREAMS_LIB@ export BOOST_LDFLAGS=@BOOST_LDFLAGS@ export BOOST_SYSTEM_LIB=@BOOST_SYSTEM_LIB@ diff --git a/configure.ac b/configure.ac index dab1919..7b5cedd 100644 --- a/configure.ac +++ b/configure.ac @@ -8836,6 +8836,7 @@ if test "$with_system_boost" = "yes"; then SYSTEM_BOOST=TRUE AX_BOOST_BASE(1.47) AX_BOOST_DATE_TIME + AX_BOOST_FILESYSTEM AX_BOOST_IOSTREAMS mingw_boost_date_time_dll=`echo $BOOST_DATE_TIME_LIB | sed -e 's/^-l//' -e 's/\.dll$//'` libo_MINGW_TRY_DLL([$mingw_boost_date_time_dll]) diff --git a/m4/ax_boost_filesystem.m4 b/m4/ax_boost_filesystem.m4 new file mode 100644 index 0000000..f162163 --- /dev/null +++ b/m4/ax_boost_filesystem.m4 @@ -0,0 +1,118 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_filesystem.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_FILESYSTEM +# +# DESCRIPTION +# +# Test for Filesystem library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. Further documentation is +# available at <http://randspringer.de/boost/index.html>. +# +# This macro calls: +# +# AC_SUBST(BOOST_FILESYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_FILESYSTEM +# +# LICENSE +# +# Copyright (c) 2009 Thomas Porschberg <tho...@randspringer.de> +# Copyright (c) 2009 Michael Tindal +# Copyright (c) 2009 Roman Rybalko <libtorr...@romanr.info> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 26 + +AC_DEFUN([AX_BOOST_FILESYSTEM], +[ + AC_ARG_WITH([boost-filesystem], + AS_HELP_STRING([--with-boost-filesystem@<:@=special-lib@:>@], + [use the Filesystem library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-filesystem=boost_filesystem-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_filesystem_lib="" + else + want_boost="yes" + ax_boost_user_filesystem_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + LIBS_SAVED=$LIBS + LIBS="$LIBS $BOOST_SYSTEM_LIB" + export LIBS + + AC_CACHE_CHECK(whether the Boost::Filesystem library is available, + ax_cv_boost_filesystem, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/filesystem/path.hpp>]], + [[using namespace boost::filesystem; + path my_path( "foo/bar/data.txt" ); + return 0;]])], + ax_cv_boost_filesystem=yes, ax_cv_boost_filesystem=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_filesystem" = "xyes"; then + AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::Filesystem library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_filesystem_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_filesystem* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], + [link_filesystem="no"]) + done + if test "x$link_filesystem" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_filesystem* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], + [link_filesystem="no"]) + done + fi + else + for ax_lib in $ax_boost_user_filesystem_lib boost_filesystem-$ax_boost_user_filesystem_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], + [link_filesystem="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_filesystem" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + LIBS="$LIBS_SAVED" + fi +]) -- cgit v0.10.2 ++++++ 0003-boost-filesystem2.patch ++++++ >From b4339fa7eee12f173b2273aed5dc6b8abae528f4 Mon Sep 17 00:00:00 2001 From: David Tardon <dtar...@redhat.com> Date: Tue, 8 Mar 2016 06:08:36 +0100 Subject: define boost_filestystem external for system boost too Change-Id: Ie9bfc6a5f3e1862acbd1bb08c6f2bb0b63f2587e Index: libreoffice-5.1.1.3/RepositoryExternal.mk =================================================================== --- libreoffice-5.1.1.3.orig/RepositoryExternal.mk +++ libreoffice-5.1.1.3/RepositoryExternal.mk @@ -676,6 +676,13 @@ $(call gb_LinkTarget_add_libs,$(1),\ endef +define gb_LinkTarget__use_boost_filesystem +$(call gb_LinkTarget__use_boost_lib,$(1),$(BOOST_FILESYSTEM_LIB)) + +endef + +gb_ExternalProject__use_boost_filesystem := + define gb_LinkTarget__use_boost_iostreams $(call gb_LinkTarget_set_include,$(1),\ $$(INCLUDE) \ ++++++ 5c0c9ac0996fbb4a0e17780ff5441959-graphite2-minimal-1.3.4.tgz -> 17df8301bcc459e83f8a8f3aca6183b2-graphite-minimal-1.3.6.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/COPYING new/graphite2-1.3.6/COPYING --- old/graphite2-1.3.4/COPYING 1970-01-01 01:00:00.000000000 +0100 +++ new/graphite2-1.3.6/COPYING 2016-02-29 05:18:01.000000000 +0100 @@ -0,0 +1,26 @@ +/* GRAPHITE2 LICENSING + + Copyright 2010, SIL International + All rights reserved. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should also have received a copy of the GNU Lesser General Public + License along with this library in the file named "LICENSE". + If not, write to the Free Software Foundation, 51 Franklin Street, + Suite 500, Boston, MA 02110-1335, USA or visit their web page on the + internet at http://www.fsf.org/licenses/lgpl.html. + + Alternatively, you may use this library under the terms of the Mozilla + Public License (http://mozilla.org/MPL) or under the GNU General Public + License, as published by the Free Sofware Foundation; either version + 2 of the license or (at your option) any later version. +*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/ChangeLog new/graphite2-1.3.6/ChangeLog --- old/graphite2-1.3.4/ChangeLog 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/ChangeLog 1970-01-01 01:00:00.000000000 +0100 @@ -1,181 +0,0 @@ -1.3.4 - . Transition from Mercurial to Git - . Bug fixes - . Fix Collision Kerning ignoring some diacritics - . Handle pass bits 16-31 to speed up fonts with > 16 passes - . Various minor fuzz bug fixes - . Make Coverity happy - . Add GR_FALLTHROUGH macro for clang c++11 - -1.3.3 - . Slight speed up in Collision Avoidance - . Remove dead bidi code - . Bug fixes - . Between pass bidi reorderings and at the end - . Decompressor fuzz bugs - . Other fuzz bugs - -1.3.2 - . Remove full bidi. All segments are assumed to be single directioned. - . Bug fixes: - . Decompressor corner cases - . Various fuzz bugs - -1.3.1 - . Deprecation warning: Full bidi support is about to be deprecated. Make contact - if this impacts you. - . Change compression block format slightly to conform to LZ4 - . Bug fixes: - . Handle mono direction text with diacritics consistently. Fonts - now see the direction they expect consistently and bidi now - gives expected results. - . Fixed lots of fuzz bugs - . Coverity cleanups - . Build now works for clang and/or asan and/or afl etc. - -1.3.0 - . Add collision avoidance - . Shift Collider - . Kern Collider - . Octabox outlines and subboxes - . Add compressed Silf and Glat table support - . Bug fixes: - . Stop loops forming in the child, sibling tree - . Handle bidi mirroring correctly if no bidi occurring - -1.2.4 - . Face failure now has error code reporting via debug logging - . can now call gr_start_logging(NULL, fname) - . gr2fonttest --alltrace added - . Format 14 table support - . Not done. To be handled entirely in the compiler - . Bidi support for Unicode 6.3 Isolating direction controls - . Fonts no longer require a glyf/loca table. In such cases the bounding box is always 0. - . Clang ASAN build support added for testing. - . Handle out of memory sanely. - . Documentation improvements - . Bug fixes: - . Enforce fonts having to store glyph attributes by monotonically increasing attribute number - . zeropadding was not getting called on feature tags - . automatic associations for unassociated characters - . use direct engine on Mac - . various extreme case reading 1 past the end errors fixed - . remove tabs from sources so that it becomes readable again - -1.2.3 - . Bug fixes only: - . fix byte swapping when testing cmap subtable lengths - . work around armel compilation problems with conditional operators - . fix pseudoglyph support for advance and bbox - -1.2.2 - . Add support for passKeySlot (makes Charis 2x faster) up to 32 passes - . Add telemetry output to json if enabled in build GRAPHITE2_TELEMETRY - . Shrink font memory footprint particularly in the fsm - . Add -S to comparerenderer - . Bug fixes: - . Fix shift.x being reversed for rtl text - . Fix faulty fallback justification - . Fix bad cmap handling - . Support compiling on old Solaris where bidi attributes clash with register names - . Follow the crowd in using Windows.h - -1.2.1 - . Bug fixes: - . Allow glyph reattachment - . Allow signed glyph attributes - . Various build problems with MacOS, old gcc versions, etc. - . Various overrun read errors fixed - -1.2.0 - . API Changes: - . Added Windows friendly gr_start_logging and gr_stop_logging, now per face - . Added gr_make_face_with_ops, gr_make_face_with_seg_cache_and_ops - . Added gr_make_font_with_ops - . Added gr_face_is_char_supported - . Added gr_face_info to give info to apps about face capabilities - . Deprecated gr_make_face, gr_make_face_with_seg_cache, gr_make_font_with_advance_fn - . Deprecated graphite_start_logging and graphite_stop_logging - . These functions are stubbed now and do nothing, but do compile and link. - . Bump API version to 3 - . Add C# wrapper to contrib - . Handle justification information in a font and do something useful with it - . Builds clang clean (has done for a while) - . Bug fixes - . Windows build and bug fixes - . Add extra information to json debug output - . Added windows build documentation - . Added freetype sample code and test - -1.1.3 - . Default build has GRAPHITE2_COMPARE_RENDERER to OFF to reduce dependencies - . Builds on Mac with clang - . Debug output improvements - . Tidy up perl wrappers - . Fuzz tester improvements - . Various bug fixes for bad font handling - -1.1.2 - . Support feature ids < 4 chars when space padded for inclusion in FF 14. - . More fuzztesting and removal of causes of valgrind bad reads and sigabrts - . Remove contrib/android into its own repo (http://hg.palaso.org/grandroid) - . Update comparerenderer to latest harfbuzzng api - -1.1.1 - . Missing Log.h included - . perl wrappers updated - -1.1.0 - . Refactored debug output to use json - . Renamed VM_MACHINE_TYPE to GRAPHITE2_VM_TYPE - . Renamed DISABLE_SEGCACHE to GRAPHITE2_NSEGCACE - . Renamed DISBALE_FILE_FACE to GRAPHITE2_NFILEFACE - . Renamed ENABLE_COMPARE_RENDERER to GRAPHTIE2_COMPARE_RENDERER - . Renamed DOXYGEN_CONFIG to GRAPHITE2_DOXYGEN_CONFIG - . Renamed GR2_CUSTOM_HEADER to GRAPHITE2_CUSTOM_HEADER - . Renamed GR2_EXPORTING to GRAPHITE2_EXPORTING - . Added GRAPHITE2_STATIC for static only builds - . Added GRAPHITE2_NTRACING to compile out tracing code - . Documented GRAPHITE2_{EXPORTING,STATIC,NTRACING} in hacking.txt - . Bump libtool version to 2.1.0 - . dumb font rendering works - . slot user attributes are now signed rather than unsigned - . add support for long class maps - . Rename perl library to avoid nameclash on Windows - . Various robustness fixes - . Moved internal .h files into src/inc - . Parallelise fuzztest - . General build improvements, particularly on Windows - -1.0.3 - . Fix UTF16 surrogate support - . script and lang tags may be space padded or null padded - . Remove need for WORDS_BIGENDIAN, do it all automatically - . Remove all #include <new>. Use CLASS_NEW_DELETE instead. - . Fix comparerenderer to work with current hbng - . Add valgrind to fuzztest to ensure good memory use at all times - . Fix new fuzztest exposed bugs. - . Fix bugs exposed by Mozilla security review - . Add continuous integration build on Windows support - -1.0.2 - . Fix Windows build - . Comparerenderer uses hbng enforcing ot rendering - . Add Bidi .hasChar support and refactor mirroring code - . Make cmake default Release rather than debug - . Don't compile in a boat load of TtfUtil that isn't used, saving 15% of binary - . Chase the FSF around its latest office moves - . WORDS_BIGENDIAN is set at the top so tests now pass on ppc, etc. - . More words in the manual - -1.0.1 - . Release is the default build in cmake now. - . Refactor cmake build to not rebuild things so much. - . Include a missing file - . Remove -nostdlibs, making gcc happy everywhere - . Update comparerenderer to latest hbng interface - . Add changelog - -1.0.0 - . First major release of perfect code! - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/include/graphite2/Font.h new/graphite2-1.3.6/include/graphite2/Font.h --- old/graphite2-1.3.4/include/graphite2/Font.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/include/graphite2/Font.h 2016-02-29 05:18:01.000000000 +0100 @@ -30,7 +30,7 @@ #define GR2_VERSION_MAJOR 1 #define GR2_VERSION_MINOR 3 -#define GR2_VERSION_BUGFIX 4 +#define GR2_VERSION_BUGFIX 6 #ifdef __cplusplus extern "C" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/CmapCache.cpp new/graphite2-1.3.6/src/CmapCache.cpp --- old/graphite2-1.3.4/src/CmapCache.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/CmapCache.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -38,11 +38,11 @@ { const void * stbl; if (!cmap.size()) return 0; - if (TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 3, 1, cmap.size()), cmap.size()) - || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 3, cmap.size()), cmap.size()) - || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 2, cmap.size()), cmap.size()) - || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 1, cmap.size()), cmap.size()) - || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 0, cmap.size()), cmap.size())) + if (TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 3, 1, cmap.size()), cmap + cmap.size()) + || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 3, cmap.size()), cmap + cmap.size()) + || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 2, cmap.size()), cmap + cmap.size()) + || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 1, cmap.size()), cmap + cmap.size()) + || TtfUtil::CheckCmapSubtable4(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 0, cmap.size()), cmap + cmap.size())) return stbl; return 0; } @@ -51,8 +51,8 @@ { const void * stbl; if (!cmap.size()) return 0; - if (TtfUtil::CheckCmapSubtable12(stbl = TtfUtil::FindCmapSubtable(cmap, 3, 10, cmap.size()), cmap.size()) - || TtfUtil::CheckCmapSubtable12(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 4, cmap.size()), cmap.size())) + if (TtfUtil::CheckCmapSubtable12(stbl = TtfUtil::FindCmapSubtable(cmap, 3, 10, cmap.size()), cmap + cmap.size()) + || TtfUtil::CheckCmapSubtable12(stbl = TtfUtil::FindCmapSubtable(cmap, 0, 4, cmap.size()), cmap + cmap.size())) return stbl; return 0; } @@ -64,7 +64,7 @@ int rangeKey = 0; uint32 codePoint = NextCodePoint(cst, 0, &rangeKey), prevCodePoint = 0; - while (codePoint != limit) + while (codePoint < limit) { unsigned int block = codePoint >> 8; if (!blocks[block]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/Code.cpp new/graphite2-1.3.6/src/Code.cpp --- old/graphite2-1.3.4/src/Code.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/Code.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -84,8 +84,9 @@ struct limits; struct analysis { + static const int NUMCONTEXTS = 256; uint8 slotref; - context contexts[256]; + context contexts[NUMCONTEXTS]; byte max_ref; analysis() : slotref(0), max_ref(0) {}; @@ -120,6 +121,7 @@ analysis _analysis; enum passtype _passtype; int _stack_depth; + bool _in_ctxt_item; }; @@ -139,7 +141,8 @@ _pre_context(code._constraint ? 0 : lims.pre_context), _rule_length(code._constraint ? 1 : lims.rule_length), _instr(code._code), _data(code._data), _max(lims), _passtype(pt), - _stack_depth(0) + _stack_depth(0), + _in_ctxt_item(false) { } @@ -356,8 +359,8 @@ break; case CNTXT_ITEM : valid_upto(_max.rule_length, _max.pre_context + int8(bc[0])); - if (bc + 2 + bc[1] >= _max.bytecode) failure(jump_past_end); - if (_pre_context != 0) failure(nested_context_item); + if (bc + 2 + bc[1] >= _max.bytecode) failure(jump_past_end); + if (_in_ctxt_item) failure(nested_context_item); break; case ATTR_SET : case ATTR_ADD : @@ -366,6 +369,8 @@ if (--_stack_depth < 0) failure(underfull_stack); valid_upto(gr_slatMax, bc[0]); + if (attrCode(bc[0]) == gr_slatUserDefn) // use IATTR for user attributes + failure(out_of_range_data); test_context(); break; case IATTR_SET_SLOT : @@ -379,6 +384,8 @@ ++_stack_depth; valid_upto(gr_slatMax, bc[0]); valid_upto(_rule_length, _pre_context + int8(bc[1])); + if (attrCode(bc[0]) == gr_slatUserDefn) // use IATTR for user attributes + failure(out_of_range_data); break; case PUSH_GLYPH_ATTR_OBS : ++_stack_depth; @@ -578,6 +585,7 @@ if (opc == CNTXT_ITEM) { assert(_pre_context == 0); + _in_ctxt_item = true; _pre_context = _max.pre_context + int8(_data[-2]); _rule_length = _max.rule_length; @@ -596,6 +604,7 @@ _rule_length = 1; _pre_context = 0; + _in_ctxt_item = false; } else { @@ -657,14 +666,14 @@ bool Machine::Code::decoder::valid_upto(const uint16 limit, const uint16 x) const throw() { - const bool t = x < limit; + const bool t = (limit != 0) && (x < limit); if (!t) failure(out_of_range_data); return t; } bool Machine::Code::decoder::test_context() const throw() { - if (_pre_context >= _rule_length) + if (_pre_context >= _rule_length || _analysis.slotref >= analysis::NUMCONTEXTS - 1) { failure(out_of_range_data); return false; @@ -682,7 +691,7 @@ inline void Machine::Code::decoder::analysis::set_ref(int index, bool incinsert) throw() { if (incinsert && contexts[slotref].flags.inserted) --index; - if (index + slotref < 0) return; + if (index + slotref < 0 || index + slotref >= NUMCONTEXTS) return; contexts[index + slotref].flags.referenced = true; if ((index > 0 || !contexts[index + slotref].flags.inserted) && index + slotref > max_ref) max_ref = index + slotref; } @@ -691,7 +700,7 @@ inline void Machine::Code::decoder::analysis::set_noref(int index) throw() { if (contexts[slotref].flags.inserted) --index; - if (index + slotref < 0) return; + if (index + slotref < 0 || index + slotref >= NUMCONTEXTS) return; if ((index > 0 || !contexts[index + slotref].flags.inserted) && index + slotref > max_ref) max_ref = index + slotref; } @@ -699,7 +708,7 @@ inline void Machine::Code::decoder::analysis::set_changed(int index) throw() { if (contexts[slotref].flags.inserted) --index; - if (index + slotref < 0) return; + if (index + slotref < 0 || index + slotref >= NUMCONTEXTS) return; contexts[index + slotref].flags.changed = true; if ((index > 0 || !contexts[index + slotref].flags.inserted) && index + slotref > max_ref) max_ref = index + slotref; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/Face.cpp new/graphite2-1.3.6/src/Face.cpp --- old/graphite2-1.3.4/src/Face.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/Face.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -195,7 +195,6 @@ << "output" << json::array; for(Slot * s = seg->first(); s; s = s->next()) *dbgout << dslot(seg, s); - seg->finalise(0); // Call this here to fix up charinfo back indexes. *dbgout << json::close << "advance" << seg->advance() << "chars" << json::array; @@ -239,7 +238,7 @@ case kgmetAscent : return m_ascent; case kgmetDescent : return m_descent; default: - if (gid > glyphs().numGlyphs()) return 0; + if (gid >= glyphs().numGlyphs()) return 0; return glyphs().glyph(gid)->getMetric(metric); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/FileFace.cpp new/graphite2-1.3.6/src/FileFace.cpp --- old/graphite2-1.3.4/src/FileFace.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/FileFace.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -60,8 +60,12 @@ if (!TtfUtil::GetTableDirInfo(_header_tbl, tbl_offset, tbl_len)) return; _table_dir = (TtfUtil::Sfnt::OffsetSubTable::Entry*)gralloc<char>(tbl_len); if (fseek(_file, tbl_offset, SEEK_SET)) return; - if (_table_dir) - if (fread(_table_dir, 1, tbl_len, _file) != tbl_len) return; + if (_table_dir && fread(_table_dir, 1, tbl_len, _file) != tbl_len) + { + free(_table_dir); + _table_dir = NULL; + } + return; } FileFace::~FileFace() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/GlyphCache.cpp new/graphite2-1.3.6/src/GlyphCache.cpp --- old/graphite2-1.3.4/src/GlyphCache.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/GlyphCache.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -265,7 +265,7 @@ { if ((m_pGlat = Face::Table(face, Tag::Glat, 0x00030000)) == NULL || (m_pGloc = Face::Table(face, Tag::Gloc)) == NULL - || m_pGloc.size() < 6) + || m_pGloc.size() < 8) { _head = Face::Table(); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/Pass.cpp new/graphite2-1.3.6/src/Pass.cpp --- old/graphite2-1.3.4/src/Pass.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/Pass.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -100,7 +100,9 @@ if (e.test(pass_length < 40, E_BADPASSLENGTH)) return face.error(e); // Read in basic values const byte flags = be::read<byte>(p); - if (e.test((flags & 0x1f) && pt < PASS_TYPE_POSITIONING, E_BADCOLLISIONPASS)) + if (e.test((flags & 0x1f) && + (pt < PASS_TYPE_POSITIONING || !m_silf->aCollision() || !face.glyphs().hasBoxes()), + E_BADCOLLISIONPASS)) return face.error(e); m_numCollRuns = flags & 0x7; m_kernColls = (flags >> 3) & 0x3; @@ -236,7 +238,7 @@ if (e.test(!(m_rules && m_codes && m_progs), E_OUTOFMEM)) return face.error(e); Rule * r = m_rules + m_numRules - 1; - for (size_t n = m_numRules; n; --n, --r, ac_end = ac_begin, rc_end = rc_begin) + for (size_t n = m_numRules; r >= m_rules; --n, --r, ac_end = ac_begin, rc_end = rc_begin) { face.error_context((face.error_context() & 0xFFFF00) + EC_ARULE + ((n - 1) << 24)); r->preContext = *--precontext; @@ -408,6 +410,7 @@ do { findNDoRule(s, m, fsm); + if (m.status() != Machine::finished) return false; if (s && (s == m.slotMap().highwater() || m.slotMap().highpassed() || --lc == 0)) { if (!lc) s = m.slotMap().highwater(); @@ -498,7 +501,12 @@ // Search for the first rule which passes the constraint const RuleEntry * r = fsm.rules.begin(), * const re = fsm.rules.end(); - while (r != re && !testConstraint(*r->rule, m)) ++r; + while (r != re && !testConstraint(*r->rule, m)) + { + ++r; + if (m.status() != Machine::finished) + return; + } #if !defined GRAPHITE2_NTRACING if (fsm.dbgout) @@ -533,6 +541,7 @@ if (r != re) { const int adv = doAction(r->rule->action, slot, m); + if (m.status() != Machine::finished) return; if (r->rule->action->deletes()) fsm.slots.collectGarbage(slot); adjustSlot(adv, slot, fsm.slots); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/SegCacheEntry.cpp new/graphite2-1.3.6/src/SegCacheEntry.cpp --- old/graphite2-1.3.4/src/SegCacheEntry.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/SegCacheEntry.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -61,8 +61,7 @@ } const Slot * slot = seg->first(); m_glyph = new Slot[glyphCount]; - int attrSize = seg->numAttrs() + (seg->hasCollisionInfo() ? (sizeof(SlotCollision) + 1) / 2 : 0); - m_attr = gralloc<int16>(glyphCount * attrSize); + m_attr = gralloc<int16>(glyphCount * seg->numAttrs()); if (!m_glyph || (!m_attr && seg->numAttrs())) return; m_glyphLength = glyphCount; Slot * slotCopy = m_glyph; @@ -71,9 +70,9 @@ uint16 pos = 0; while (slot) { - slotCopy->userAttrs(m_attr + pos * attrSize); + slotCopy->userAttrs(m_attr + pos * seg->numAttrs()); slotCopy->m_justs = m_justs ? reinterpret_cast<SlotJustify *>(m_justs + justs_pos++ * sizeof_sjust) : 0; - slotCopy->set(*slot, -static_cast<int32>(charOffset), attrSize, seg->silf()->numJustLevels(), length); + slotCopy->set(*slot, -static_cast<int32>(charOffset), seg->numAttrs(), seg->silf()->numJustLevels(), length); slotCopy->index(pos); if (slot->firstChild()) slotCopy->m_child = m_glyph + slot->firstChild()->index(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/Segment.cpp new/graphite2-1.3.6/src/Segment.cpp --- old/graphite2-1.3.4/src/Segment.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/Segment.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -46,6 +46,7 @@ : m_freeSlots(NULL), m_freeJustifies(NULL), m_charinfo(new CharInfo[numchars]), + m_collisions(NULL), m_face(face), m_silf(face->chooseSilf(script)), m_first(NULL), @@ -71,6 +72,7 @@ for (JustifyRope::iterator i = m_justifies.begin(); i != m_justifies.end(); ++i) free(*i); delete[] m_charinfo; + free(m_collisions); } #ifndef GRAPHITE2_NSEGCACHE @@ -175,8 +177,7 @@ if (m_face->logger()) ++numUser; #endif Slot *newSlots = grzeroalloc<Slot>(m_bufSize); - int attrSize = numUser + (hasCollisionInfo() ? ((sizeof(SlotCollision) + 1) / 2) : 0); - int16 *newAttrs = grzeroalloc<int16>(m_bufSize * attrSize); + int16 *newAttrs = grzeroalloc<int16>(m_bufSize * numUser); if (!newSlots || !newAttrs) { free(newSlots); @@ -185,7 +186,7 @@ } for (size_t i = 0; i < m_bufSize; i++) { - ::new (newSlots + i) Slot(newAttrs + i * attrSize); + ::new (newSlots + i) Slot(newAttrs + i * numUser); newSlots[i].next(newSlots + i + 1); } newSlots[m_bufSize - 1].next(NULL); @@ -209,13 +210,17 @@ aSlot->attachedTo()->removeChild(aSlot); while (aSlot->firstChild()) { - aSlot->firstChild()->attachTo(NULL); - aSlot->removeChild(aSlot->firstChild()); + if (aSlot->firstChild()->attachedTo() == aSlot) + { + aSlot->firstChild()->attachTo(NULL); + aSlot->removeChild(aSlot->firstChild()); + } + else + aSlot->firstChild(NULL); } // reset the slot incase it is reused ::new (aSlot) Slot(aSlot->userAttrs()); - int attrSize = m_silf->numUser() + (hasCollisionInfo() ? ((sizeof(SlotCollision) + 1) / 2) : 0); - memset(aSlot->userAttrs(), 0, attrSize * sizeof(int16)); + memset(aSlot->userAttrs(), 0, m_silf->numUser() * sizeof(int16)); // Update generation counter for debug #if !defined GRAPHITE2_NTRACING if (m_face->logger()) @@ -304,14 +309,13 @@ assert(offset + numChars <= m_numCharinfo); Slot * indexmap[eMaxSpliceSize*3]; assert(numGlyphs < sizeof indexmap/sizeof *indexmap); - int attrSize = m_silf->numUser() + (hasCollisionInfo() ? ((sizeof(SlotCollision) + 1) / 2) : 0); Slot * slot = startSlot; for (uint16 i=0; i < numGlyphs; slot = slot->next(), ++i) indexmap[i] = slot; for (slot = startSlot; slot != endSlot; slot = slot->next(), srcSlot = srcSlot->next()) { - slot->set(*srcSlot, offset, attrSize, m_silf->numJustLevels(), numChars); + slot->set(*srcSlot, offset, m_silf->numUser(), m_silf->numJustLevels(), numChars); if (srcSlot->attachedTo()) slot->attachTo(indexmap[srcSlot->attachedTo()->index()]); if (srcSlot->nextSibling()) slot->m_sibling = indexmap[srcSlot->nextSibling()->index()]; if (srcSlot->firstChild()) slot->m_child = indexmap[srcSlot->firstChild()->index()]; @@ -523,6 +527,9 @@ bool Segment::initCollisions() { + m_collisions = grzeroalloc<SlotCollision>(slotCount()); + if (!m_collisions) return false; + for (Slot *p = m_first; p; p = p->next()) ::new (collisionInfo(p)) SlotCollision(this, p); return true; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/Slot.cpp new/graphite2-1.3.6/src/Slot.cpp --- old/graphite2-1.3.4/src/Slot.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/Slot.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -197,6 +197,8 @@ { ind = gr_slatUserDefn; subindex = 0; + if (seg->numAttrs() == 0) + return 0; } else if (ind >= gr_slatJStretch && ind < gr_slatJStretch + 20 && ind != gr_slatJWidth) { @@ -274,6 +276,8 @@ { ind = gr_slatUserDefn; subindex = 0; + if (seg->numAttrs() == 0) + return; } else if (ind >= gr_slatJStretch && ind < gr_slatJStretch + 20 && ind != gr_slatJWidth) { @@ -421,7 +425,7 @@ else if (ap == m_child) { Slot *nSibling = m_child->nextSibling(); - m_child->sibling(NULL); + m_child->removeSibling(nSibling); m_child = nSibling; return true; } @@ -436,7 +440,7 @@ else if (ap == m_sibling) { m_sibling = m_sibling->nextSibling(); - ap->sibling(NULL); + if (m_sibling) ap->removeSibling(m_sibling); return true; } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/TtfUtil.cpp new/graphite2-1.3.6/src/TtfUtil.cpp --- old/graphite2-1.3.4/src/TtfUtil.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/TtfUtil.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -889,8 +889,9 @@ /*---------------------------------------------------------------------------------------------- Check the Microsoft Unicode subtable for expected values ----------------------------------------------------------------------------------------------*/ -bool CheckCmapSubtable4(const void * pCmapSubtable4, size_t table_len /*, unsigned int maxgid*/) +bool CheckCmapSubtable4(const void * pCmapSubtable4, const void * pCmapEnd /*, unsigned int maxgid*/) { + size_t table_len = (const byte *)pCmapEnd - (const byte *)pCmapSubtable4; if (!pCmapSubtable4) return false; const Sfnt::CmapSubTable * pTable = reinterpret_cast<const Sfnt::CmapSubTable *>(pCmapSubtable4); // Bob H say some freeware TT fonts have version 1 (eg, CALIGULA.TTF) @@ -952,7 +953,7 @@ uint16 nSeg = be::swap(pTable->seg_count_x2) >> 1; uint16 n; - const uint16 * pLeft, * pMid; + const uint16 * pLeft, * pMid; uint16 cMid, chStart, chEnd; if (rangeKey) @@ -1049,7 +1050,7 @@ // Just in case we have a bad key: while (iRange > 0 && be::peek<uint16>(pStartCode + iRange) > nUnicodePrev) iRange--; - while (be::peek<uint16>(pTable->end_code + iRange) < nUnicodePrev) + while (iRange < nRange - 1 && be::peek<uint16>(pTable->end_code + iRange) < nUnicodePrev) iRange++; // Now iRange is the range containing nUnicodePrev. @@ -1074,14 +1075,15 @@ // ends with 0xFFFF. if (pRangeKey) *pRangeKey = iRange + 1; - return be::peek<uint16>(pStartCode + iRange + 1); + return (iRange + 1 >= nRange) ? 0xFFFF : be::peek<uint16>(pStartCode + iRange + 1); } /*---------------------------------------------------------------------------------------------- Check the Microsoft UCS-4 subtable for expected values. ----------------------------------------------------------------------------------------------*/ -bool CheckCmapSubtable12(const void *pCmapSubtable12, size_t table_len /*, unsigned int maxgid*/) +bool CheckCmapSubtable12(const void *pCmapSubtable12, const void *pCmapEnd /*, unsigned int maxgid*/) { + size_t table_len = (const byte *)pCmapEnd - (const byte *)pCmapSubtable12; if (!pCmapSubtable12) return false; const Sfnt::CmapSubTable * pTable = reinterpret_cast<const Sfnt::CmapSubTable *>(pCmapSubtable12); if (be::swap(pTable->format) != 12) @@ -1093,7 +1095,7 @@ if (length < sizeof(Sfnt::CmapSubTableFormat12)) return false; uint32 num_groups = be::swap(pTable12->num_groups); - if (length != (sizeof(Sfnt::CmapSubTableFormat12) + (num_groups - 1) * sizeof(uint32) * 3)) + if (num_groups > 0x10000000 || length != (sizeof(Sfnt::CmapSubTableFormat12) + (num_groups - 1) * sizeof(uint32) * 3)) return false; #if 0 for (unsigned int i = 0; i < num_groups; ++i) @@ -1166,7 +1168,7 @@ // Just in case we have a bad key: while (iRange > 0 && be::swap(pTable->group[iRange].start_char_code) > nUnicodePrev) iRange--; - while (be::swap(pTable->group[iRange].end_char_code) < nUnicodePrev) + while (iRange < nRange - 1 && be::swap(pTable->group[iRange].end_char_code) < nUnicodePrev) iRange++; // Now iRange is the range containing nUnicodePrev. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/call_machine.cpp new/graphite2-1.3.6/src/call_machine.cpp --- old/graphite2-1.3.4/src/call_machine.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/call_machine.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -72,6 +72,7 @@ const instr * & ip; uint8 direction; int8 flags; + Machine::status_t & status; }; typedef bool (* ip_t)(registers); @@ -88,6 +89,7 @@ #define mapb reg.map_base #define flags reg.flags #define dir reg.direction +#define status reg.status #include "inc/opcodes.h" @@ -113,7 +115,7 @@ const byte * dp = data; stack_t * sp = _stack + Machine::STACK_GUARD, * const sb = sp; - regbank reg = {*map, map, _map, _map.begin()+_map.context(), ip, _map.dir(), 0}; + regbank reg = {*map, map, _map, _map.begin()+_map.context(), ip, _map.dir(), 0, _status}; // Run the program while ((reinterpret_cast<ip_t>(*++ip))(dp, sp, sb, reg)) {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/direct_machine.cpp new/graphite2-1.3.6/src/direct_machine.cpp --- old/graphite2-1.3.4/src/direct_machine.cpp 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/direct_machine.cpp 2016-02-29 05:18:01.000000000 +0100 @@ -62,6 +62,7 @@ Machine::stack_t * stack, slotref * & __map, uint8 _dir, + Machine::status_t & status, SlotMap * __smap=0) { // We need to define and return to opcode table from within this function @@ -71,17 +72,17 @@ return opcode_table; // Declare virtual machine registers - const instr * ip = program; - const byte * dp = data; - Machine::stack_t * sp = stack + Machine::STACK_GUARD, - * const sb = sp; - SlotMap & smap = *__smap; - Segment & seg = smap.segment; - slotref is = *__map, - * map = __map, - * const mapb = smap.begin()+smap.context(); - uint8 dir = _dir; - int8 flags = 0; + const instr * ip = program; + const byte * dp = data; + Machine::stack_t * sp = stack + Machine::STACK_GUARD, + * const sb = sp; + SlotMap & smap = *__smap; + Segment & seg = smap.segment; + slotref is = *__map, + * map = __map, + * const mapb = smap.begin()+smap.context(); + uint8 dir = _dir; + int8 flags = 0; // start the program goto **ip; @@ -100,7 +101,8 @@ const opcode_t * Machine::getOpcodeTable() throw() { slotref * dummy; - return static_cast<const opcode_t *>(direct_run(true, 0, 0, 0, dummy, 0)); + Machine::status_t dumstat = Machine::finished; + return static_cast<const opcode_t *>(direct_run(true, 0, 0, 0, dummy, 0, dumstat)); } @@ -111,7 +113,7 @@ assert(program != 0); const stack_t *sp = static_cast<const stack_t *>( - direct_run(false, program, data, _stack, is, _map.dir(), &_map)); + direct_run(false, program, data, _stack, is, _map.dir(), _status, &_map)); const stack_t ret = sp == _stack+STACK_GUARD+1 ? *sp-- : 0; check_final_stack(sp); return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/inc/Code.h new/graphite2-1.3.6/src/inc/Code.h --- old/graphite2-1.3.4/src/inc/Code.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/inc/Code.h 2016-02-29 05:18:01.000000000 +0100 @@ -114,7 +114,7 @@ inline size_t Machine::Code::estimateCodeDataOut(size_t n_bc) { - return n_bc * (sizeof(instr)+sizeof(byte)); + return (n_bc + 1) * (sizeof(instr)+sizeof(byte)); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/inc/GlyphCache.h new/graphite2-1.3.6/src/inc/GlyphCache.h --- old/graphite2-1.3.4/src/inc/GlyphCache.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/inc/GlyphCache.h 2016-02-29 05:18:01.000000000 +0100 @@ -112,6 +112,7 @@ const SlantBox & getSubBoundingSlantBox(unsigned short glyphid, uint8 subindex) const; const BBox & getSubBoundingBBox(unsigned short glyphid, uint8 subindex) const; bool check(unsigned short glyphid) const; + bool hasBoxes() const { return _boxes != 0; } CLASS_NEW_DELETE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/inc/Machine.h new/graphite2-1.3.6/src/inc/Machine.h --- old/graphite2-1.3.4/src/inc/Machine.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/inc/Machine.h 2016-02-29 05:18:01.000000000 +0100 @@ -140,7 +140,8 @@ stack_underflow, stack_not_empty, stack_overflow, - slot_offset_out_bounds + slot_offset_out_bounds, + died_early }; Machine(SlotMap &) throw(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/inc/Segment.h new/graphite2-1.3.6/src/inc/Segment.h --- old/graphite2-1.3.4/src/inc/Segment.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/inc/Segment.h 2016-02-29 05:18:01.000000000 +0100 @@ -160,8 +160,7 @@ bool isWhitespace(const int cid) const; bool hasCollisionInfo() const { return (m_flags & SEG_HASCOLLISIONS); } - SlotCollision *collisionInfo(const Slot *s) const { return hasCollisionInfo() ? reinterpret_cast<SlotCollision *>(s->userAttrs() + m_silf->numUser()) : 0; } - + SlotCollision *collisionInfo(const Slot *s) const { return m_collisions ? m_collisions + s->index() : 0; } CLASS_NEW_DELETE public: //only used by: GrSegment* makeAndInitialize(const GrFont *font, const GrFace *face, uint32 script, const FeaturesHandle& pFeats/*must not be IsNull*/, encform enc, const void* pStart, size_t nChars, int dir); @@ -179,6 +178,7 @@ Slot * m_freeSlots; // linked list of free slots SlotJustify * m_freeJustifies; // Slot justification blocks free list CharInfo * m_charinfo; // character info, one per input character + SlotCollision * m_collisions; const Face * m_face; // GrFace const Silf * m_silf; Slot * m_first; // first slot in segment diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/inc/TtfUtil.h new/graphite2-1.3.6/src/inc/TtfUtil.h --- old/graphite2-1.3.4/src/inc/TtfUtil.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/inc/TtfUtil.h 2016-02-29 05:18:01.000000000 +0100 @@ -137,11 +137,11 @@ ////////////////////////////////// cmap lookup tools const void * FindCmapSubtable(const void * pCmap, int nPlatformId = 3, int nEncodingId = 1, size_t length = 0); - bool CheckCmapSubtable4(const void * pCmap31, size_t table_len /*, unsigned int maxgid*/); + bool CheckCmapSubtable4(const void * pCmap31, const void * pCmapEnd /*, unsigned int maxgid*/); gid16 CmapSubtable4Lookup(const void * pCmapSubtabel4, unsigned int nUnicodeId, int rangeKey = 0); unsigned int CmapSubtable4NextCodepoint(const void *pCmap31, unsigned int nUnicodeId, int * pRangeKey = 0); - bool CheckCmapSubtable12(const void *pCmap310, size_t table_len /*, unsigned int maxgid*/); + bool CheckCmapSubtable12(const void *pCmap310, const void * pCmapEnd /*, unsigned int maxgid*/); gid16 CmapSubtable12Lookup(const void * pCmap310, unsigned int uUnicodeId, int rangeKey = 0); unsigned int CmapSubtable12NextCodepoint(const void *pCmap310, unsigned int nUnicodeId, int * pRangeKey = 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/graphite2-1.3.4/src/inc/opcodes.h new/graphite2-1.3.6/src/inc/opcodes.h --- old/graphite2-1.3.4/src/inc/opcodes.h 2015-10-22 09:39:18.000000000 +0200 +++ new/graphite2-1.3.6/src/inc/opcodes.h 2016-02-29 05:18:01.000000000 +0100 @@ -76,7 +76,7 @@ #define push(n) { *++sp = n; } #define pop() (*sp--) #define slotat(x) (map[(x)]) -#define DIE { is=seg.last(); EXIT(1); } +#define DIE { is=seg.last(); status = Machine::died_early; EXIT(1); } #define POSITIONED 1 STARTOP(nop) @@ -392,7 +392,7 @@ const int val = int(pop()); if ((slat == gr_slatPosX || slat == gr_slatPosY) && (flags & POSITIONED) == 0) { - seg.positionSlots(0, *smap.begin(), *(smap.end()-1), dir); + seg.positionSlots(0, *smap.begin(), *(smap.end()-1), seg.currdir()); flags |= POSITIONED; } int res = is->getAttr(&seg, slat, 0); @@ -405,7 +405,7 @@ const int val = int(pop()); if ((slat == gr_slatPosX || slat == gr_slatPosY) && (flags & POSITIONED) == 0) { - seg.positionSlots(0, *smap.begin(), *(smap.end()-1), dir); + seg.positionSlots(0, *smap.begin(), *(smap.end()-1), seg.currdir()); flags |= POSITIONED; } int res = is->getAttr(&seg, slat, 0); @@ -434,7 +434,7 @@ const int slot_ref = int8(param[1]); if ((slat == gr_slatPosX || slat == gr_slatPosY) && (flags & POSITIONED) == 0) { - seg.positionSlots(0, *smap.begin(), *(smap.end()-1), dir); + seg.positionSlots(0, *smap.begin(), *(smap.end()-1), seg.currdir()); flags |= POSITIONED; } slotref slot = slotat(slot_ref); @@ -510,7 +510,7 @@ idx = uint8(param[2]); if ((slat == gr_slatPosX || slat == gr_slatPosY) && (flags & POSITIONED) == 0) { - seg.positionSlots(0, *smap.begin(), *(smap.end()-1), dir); + seg.positionSlots(0, *smap.begin(), *(smap.end()-1), seg.currdir()); flags |= POSITIONED; } slotref slot = slotat(slot_ref); ++++++ liborcus-0.9.2.tar.gz -> liborcus-0.11.0.tar.gz ++++++ ++++ 30078 lines of diff (skipped) ++++++ libreoffice-5.1.0.3.tar.xz -> libreoffice-5.1.1.3.tar.xz ++++++ /work/SRC/openSUSE:Factory/libreoffice/libreoffice-5.1.0.3.tar.xz /work/SRC/openSUSE:Factory/.libreoffice.new/libreoffice-5.1.1.3.tar.xz differ: char 26, line 1 ++++++ libreoffice-help-5.1.0.3.tar.xz -> libreoffice-help-5.1.1.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libreoffice-5.1.0.3/ChangeLog-helpcontent2 new/libreoffice-5.1.1.3/ChangeLog-helpcontent2 --- old/libreoffice-5.1.0.3/ChangeLog-helpcontent2 2016-01-27 02:12:22.000000000 +0100 +++ new/libreoffice-5.1.1.3/ChangeLog-helpcontent2 2016-03-01 00:50:19.000000000 +0100 @@ -1,14 +1,14 @@ -2016-01-27 Christian Lohmaier <lohmaier+libreoff...@googlemail.com> [404375e6ced896d6bd5ea152db4752fd5af29f30] +2016-03-01 Christian Lohmaier <lohmaier+libreoff...@googlemail.com> [10392de4f15113f756babc13da381b74d05d8cdb] -Version 5.1.0.3, tag libreoffice-5.1.0.3 +Version 5.1.1.3, tag libreoffice-5.1.1.3 -Change-Id: I7e03e2ecfb7b4254443edb2579f2bde8f4ac4182 +Change-Id: Ib2696743f9427046dc952158a1db8cdf7985df2b -2016-01-13 Christian Lohmaier <lohmaier+libreoff...@googlemail.com> [ea2c0e7b8bf0f6d15b311e5c9ec4bfce47da9938] +2016-02-10 Christian Lohmaier <lohmaier+libreoff...@googlemail.com> [64bd17c71b522b540987455258131c48879134bb] -Branch libreoffice-5-1-0 +Branch libreoffice-5-1-1 -This is 'libreoffice-5-1-0' - the stable branch for the 5.1.0 release. +This is 'libreoffice-5-1-1' - the stable branch for the release. Only very safe changes, reviewed by three people are allowed. If you want to commit more complicated fix for the next .x release, @@ -16,7 +16,43 @@ If you want to build something cool, unstable, and risky, use master. -Change-Id: I61297061d189771ee4d2f51792f92264ae40edc6 +Change-Id: Ie85c3e067891f0c443b6f9a45aef7a0a845c993e + +2016-01-29 Stephan Bergmann <sberg...@redhat.com> [c3da36361e0af615920e56e9508bcce0e48f1db4] + +Unique IDs (broken with prev. commit) + +Change-Id: I0954d35bd5e13a3d63105425ceac8039a56ab2ef +(cherry picked from commit 591487475aa421d1393a54f328524886519a4095) + +...and another + +Change-Id: Ieb1a87a1f75370f3130dbf4c100c211dd3b928b9 +(cherry picked from commit 0d03b3df4b598e8b0fa431757c64ff7b005e0f8a) + +...and two more + +Change-Id: I7c546d9fa91bd06dcb3782c445a62eea37598cef +(cherry picked from commit 5f4c82272d89fb90ee0114705bb88f230b5a439d) + +Signed-off-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> + +2016-01-29 Laurent Balland-Poirier <laurent.balland-poir...@laposte.net> [0caa881976b2213448b33fa5c31741759a5e4458] + +tdf#40517 Update for '?' in decimal number format + +Add help to use '?' in user defined number format +Correction of ordered list + +Reviewed-on: https://gerrit.libreoffice.org/21827 +Reviewed-by: jan iversen <j...@documentfoundation.org> +Tested-by: jan iversen <j...@documentfoundation.org> +(cherry picked from commit ed8d3d936d9008a34a1f59baee2c241157588dba) + +Change-Id: Ia14a34cbc0d2d9cff4601a0bd19b392a3aaae268 +Reviewed-on: https://gerrit.libreoffice.org/21844 +Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> +Tested-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> 2016-01-12 Christian Lohmaier <lohmaier+libreoff...@googlemail.com> [6cc37b6e75e7aca982e89a185d9b4055b1155ec2] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libreoffice-5.1.0.3/helpcontent2/source/text/shared/01/05020301.xhp new/libreoffice-5.1.1.3/helpcontent2/source/text/shared/01/05020301.xhp --- old/libreoffice-5.1.0.3/helpcontent2/source/text/shared/01/05020301.xhp 2016-01-27 01:58:24.000000000 +0100 +++ new/libreoffice-5.1.1.3/helpcontent2/source/text/shared/01/05020301.xhp 2016-03-01 00:20:40.000000000 +0100 @@ -47,14 +47,12 @@ <listitem> <paragraph role="listitem" id="par_id3158442" xml-lang="en-US" l10n="CHG" oldref="109">In a number format code with three sections, the first section applies to positive values, the second section to negative values, and the third section to the value zero.</paragraph> </listitem> -</list> -<list type="ordered"> <listitem> <paragraph role="listitem" id="par_id3155069" xml-lang="en-US" l10n="U" oldref="110">You can also assign conditions to the three sections, so that the format is only applied if a condition is met.</paragraph> </listitem> </list> <paragraph role="heading" id="hd_id3151262" xml-lang="en-US" level="2" l10n="U" oldref="229">Decimal Places and Significant Digits</paragraph> -<paragraph role="paragraph" id="par_id3153624" xml-lang="en-US" l10n="U" oldref="3">Use zero (0) or the number sign (#) as placeholders in your number format code to represent numbers. The (#) only displays significant digits, while the (0) displays zeroes if there are fewer digits in the number than in the number format.</paragraph> +<paragraph id="par_id3153624" role="paragraph" xml-lang="en-US">Use zero (0), the number sign (#) or the question mark (?) as placeholders in your number format code to represent numbers. The (#) only displays significant digits, while the (0) displays zeroes if there are fewer digits in the number than in the number format. The (?) works as the (#) but adds a space character to keep decimal alignment if there is a hidden non-significant zero.</paragraph> <paragraph role="paragraph" id="par_id3153323" xml-lang="en-US" l10n="U" oldref="107">Use question marks (?) to represent the number of digits to include in the numerator and the denominator of a fraction. Fractions that do not fit the pattern that you define are displayed as floating point numbers.</paragraph> <paragraph role="paragraph" id="par_id3148440" xml-lang="en-US" l10n="U" oldref="4">If a number contains more digits to the right of the decimal delimiter than there are placeholders in the format, the number is rounded accordingly. If a number contains more digits to the left of the decimal delimiter than there are placeholders in the format, the entire number is displayed. Use the following list as a guide for using placeholders when you create a number format code:</paragraph> <table id="tbl_id3149760"> @@ -76,6 +74,14 @@ </tablerow> <tablerow> <tablecell> +<paragraph role="code" id="par_id3152802" xml-lang="en-US" l10n="U" oldref="239">?</paragraph> +</tablecell> +<tablecell> +<paragraph role="tablecontent" id="par_id3145091" xml-lang="en-US" l10n="U" oldref="240">Displays space characters instead of extra zeros.</paragraph> +</tablecell> +</tablerow> +<tablerow> +<tablecell> <paragraph role="code" id="par_id3147088" xml-lang="en-US" l10n="U" oldref="7">0 (Zero)</paragraph> </tablecell> <tablecell> @@ -134,6 +140,14 @@ <paragraph role="code" id="par_id3149762" xml-lang="en-US" l10n="U" oldref="20">0.##</paragraph> </tablecell> </tablerow> +<tablerow> +<tablecell> +<paragraph role="tablecontent" id="par_id3156153" xml-lang="en-US" l10n="U" oldref="241">.5 as 0.5   (with two extra spaces at the end)</paragraph> +</tablecell> +<tablecell> +<paragraph role="code" id="par_id3149763" xml-lang="en-US" l10n="U" oldref="242">0.???</paragraph> +</tablecell> +</tablerow> </table> <paragraph role="heading" id="hd_id3149276" xml-lang="en-US" level="3" l10n="U" oldref="230">Thousands Separator</paragraph> ++++++ libreoffice-hotfix-disablebrokenshapetest.patch ++++++ Index: libreoffice-5.1.1.3/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx =================================================================== --- libreoffice-5.1.1.3.orig/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx +++ libreoffice-5.1.1.3/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx @@ -1103,25 +1103,6 @@ DECLARE_OOXMLEXPORT_TEST(testTDF93675, " assertXPath(pXmlDoc, "//w:ind", "start", "1418"); } -DECLARE_OOXMLEXPORT_TEST(testFlipAndRotateCustomShape, "flip_and_rotate.odt") -{ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - // there should be no flipH and flipV attributes in this case - assertXPathNoAttribute(pXmlDoc, "//a:xfrm", "flipH"); - assertXPathNoAttribute(pXmlDoc, "//a:xfrm", "flipV"); - // check rotation angle - assertXPath(pXmlDoc, "//a:xfrm", "rot", "13500000"); - // check the first few coordinates of the polygon - assertXPath(pXmlDoc, "//a:custGeom/a:pathLst/a:path/a:lnTo[1]/a:pt", "x", "2351"); - assertXPath(pXmlDoc, "//a:custGeom/a:pathLst/a:path/a:lnTo[1]/a:pt", "y", "3171"); - assertXPath(pXmlDoc, "//a:custGeom/a:pathLst/a:path/a:lnTo[2]/a:pt", "x", "1695"); - assertXPath(pXmlDoc, "//a:custGeom/a:pathLst/a:path/a:lnTo[2]/a:pt", "y", "3171"); - assertXPath(pXmlDoc, "//a:custGeom/a:pathLst/a:path/a:lnTo[3]/a:pt", "x", "1695"); - assertXPath(pXmlDoc, "//a:custGeom/a:pathLst/a:path/a:lnTo[3]/a:pt", "y", "1701"); -} - #endif CPPUNIT_PLUGIN_IMPLEMENT(); ++++++ libreoffice-translations-5.1.0.3.tar.xz -> libreoffice-translations-5.1.1.3.tar.xz ++++++ /work/SRC/openSUSE:Factory/libreoffice/libreoffice-translations-5.1.0.3.tar.xz /work/SRC/openSUSE:Factory/.libreoffice.new/libreoffice-translations-5.1.1.3.tar.xz differ: char 26, line 1