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&#160;&#160; (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


Reply via email to