Hello community,

here is the log from the commit of package libetonyek for openSUSE:Factory 
checked in at 2019-08-22 15:04:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libetonyek (Old)
 and      /work/SRC/openSUSE:Factory/.libetonyek.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libetonyek"

Thu Aug 22 15:04:27 2019 rev:18 rq:724777 version:0.1.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/libetonyek/libetonyek.changes    2018-05-07 
14:51:46.417606467 +0200
+++ /work/SRC/openSUSE:Factory/.libetonyek.new.7948/libetonyek.changes  
2019-08-22 15:11:07.858447983 +0200
@@ -1,0 +2,6 @@
+Tue Aug 20 10:17:56 UTC 2019 - Tomáš Chvátal <tchva...@suse.com>
+
+- Update to 0.1.9:
+  * various small bugfixes and fuzzer fixes
+
+-------------------------------------------------------------------

Old:
----
  libetonyek-0.1.8.tar.xz

New:
----
  libetonyek-0.1.9.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libetonyek.spec ++++++
--- /var/tmp/diff_new_pack.oExn4D/_old  2019-08-22 15:11:08.466447826 +0200
+++ /var/tmp/diff_new_pack.oExn4D/_new  2019-08-22 15:11:08.470447824 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package libetonyek
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,13 +12,13 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 %define libname libetonyek-0_1-1
 Name:           libetonyek
-Version:        0.1.8
+Version:        0.1.9
 Release:        0
 Summary:        Library for Apple Keynote presentations
 License:        MPL-2.0
@@ -40,7 +40,7 @@
 BuildRequires:  pkgconfig(cppunit)
 BuildRequires:  pkgconfig(librevenge-0.0)
 BuildRequires:  pkgconfig(libxml-2.0)
-BuildRequires:  pkgconfig(mdds-1.2)
+BuildRequires:  pkgconfig(mdds-1.5)
 BuildRequires:  pkgconfig(zlib)
 %if 0%{?suse_version} > 1325
 BuildRequires:  libboost_headers-devel
@@ -94,6 +94,7 @@
 autoreconf -fvi
 export CXXFLAGS="%{optflags} -fvisibility-inlines-hidden"
 %configure \
+        --with-mdds="1.5" \
        --disable-silent-rules \
        --disable-werror \
        --disable-static \
@@ -102,7 +103,6 @@
 
 %install
 %make_install
-
 find %{buildroot} -type f -name "*.la" -delete -print
 
 mkdir -p %{buildroot}%{_mandir}/man1

++++++ libetonyek-0.1.8.tar.xz -> libetonyek-0.1.9.tar.xz ++++++
++++ 4870 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/ChangeLog new/libetonyek-0.1.9/ChangeLog
--- old/libetonyek-0.1.8/ChangeLog      2018-04-21 19:55:25.000000000 +0200
+++ new/libetonyek-0.1.9/ChangeLog      2018-12-29 09:17:23.000000000 +0100
@@ -1,3 +1,144 @@
+2018-12-29  David Tardon  <dtar...@redhat.com>  
[a30d7c7f352a695ba04ed64d291ecec86ad32b1e]
+
+       prepare for a release
+
+       Change-Id: Ie9d8d7122d1b04b082e0b80c30a5f9c58199b9a6
+
+2018-12-29  David Tardon  <dtar...@redhat.com>  
[6579803ea0bc964cacb1891a98d44853198adfb1]
+
+       check for mdds 1.2 by default
+
+       1.4 is still too new.
+
+       Change-Id: Ifd15d0f3266f0f1abac3beaa2c79344671e20a23
+
+2018-12-28  David Tardon  <dtar...@redhat.com>  
[442bd243a55857d38026fdbf450696ebb95d939a]
+
+       avoid assert on import of binary Numbers files
+
+       Change-Id: I14bd097103e946b2dbb55d1c17104bab827178b8
+
+2018-12-28  David Tardon  <dtar...@redhat.com>  
[4386f0eb89aa0b479f258efe9b14580c88b7d47b]
+
+       set correct package stream for iCloud Web Browser files
+
+       Change-Id: I5cfafb8eb5ee262f40398453f2026dff9bee044a
+
+2018-12-28  David Tardon  <dtar...@redhat.com>  
[f49d9dd6f836be3a1560f19b2981d3c5ef201b23]
+
+       ofz#12250 avoid division by 0
+
+       Change-Id: Ic5b3a67cf65bd4e781a817540334b437c07c8ff0
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[4b66055b121520f46f9eccd35d208e5a018787a1]
+
+       combine call into a single line
+
+       Change-Id: Idb962653bc72f15c84d711869d4149408151a095
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[004179fc13c5cbb94d174c0c48e79fcb0f0fbe20]
+
+       remove unneeded check
+
+       Change-Id: Iee910a34ecfc1e01d602515c9b86d567dbc62c99
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[dce663b768c4fe93afb4153af8e61c7eb67171aa]
+
+       fix copypasta
+
+       Change-Id: Idf54829d5eca5ed3e69c595adb8f8ff08b78cdb7
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[c027c450f552f4876775531a5151c022f59c6dbf]
+
+       reduce deps for detection test
+
+       Change-Id: I094c3cb87a5c9e4fb00ebb992f0a2e2bc64e877c
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[97ae24ef3e96fee83945010022585e0f9893a1d0]
+
+       package new test file
+
+       Change-Id: I74b6f25b0fe6628e2f30972856bec6a751888c91
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[93a9b0dab52fc219fd2094b8e18776d113cddb65]
+
+       rename macro
+
+       Change-Id: I86ff97fd63eec1fba96b1bbd481609272b69a944
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[15a5e2936938f15d971766668bfa8210378ab9a5]
+
+       drop unneeded macro definition
+
+       Change-Id: I497bce3f7da4d5902dd10f9546c6edeec7ad9663
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[c5b0907204aef19bba9113d01474977e528654a4]
+
+       restructure test for visibility
+
+       Change-Id: I14df8198232184493cae865e21e678597c1fbe55
+
+2018-12-25  David Tardon  <dtar...@redhat.com>  
[f53d4670d566da201955b89075f191602f0ba192]
+
+       tdf#120707 handle binary docs with extra top level dir
+
+       Change-Id: Ic27b6f74bc912069ca107d8441b9f9985bde3161
+
+2018-12-24  David Tardon  <dtar...@redhat.com>  
[dafc9ec9c162c0ec3823234bb2b2659f790d0b8f]
+
+       split stream tests to a separate binary
+
+       ... to avoid linking the core tests with librevenge-stream.
+
+       Change-Id: I7d5ae9cf7df401b6fffd5cf670ba138d4a77ff94
+
+2018-12-24  David Tardon  <dtar...@redhat.com>  
[38ec24d6d30d22b440102a8dd4069cb5257bb5fe]
+
+       add a stream impl. for handling subdirs
+
+       Change-Id: Id6236ffe2125d525a2c764c8ebc7227b76f4f05e
+
+2018-12-24  David Tardon  <dtar...@redhat.com>  
[bf27a4d9d0c0c6c61b7c0125ad1b113ac9cef7ea]
+
+       move detection of binary file structure to a function
+
+       Change-Id: Ia93dd8d73438870c6d1e4d0d76c89fb617177ccb
+
+2018-12-20  Caolán McNamara  <caol...@redhat.com>  
[3e4c48e042cf4929f9b69cf443165c8f3c299109]
+
+       forcepoint#77 null-deref
+
+       Change-Id: I984f0e17a5a0e2edd431f0938c69b988a2212d09
+       Reviewed-on: https://gerrit.libreoffice.org/65378
+       Reviewed-by: Caolán McNamara <caol...@redhat.com>
+       Tested-by: Caolán McNamara <caol...@redhat.com>
+
+2018-08-30  Rene Engelhard  <r...@rene-engelhard.de>  
[de0212a50489a2fcfd11db8c1eeba7e48996bba5]
+
+       support mdds 1.4
+
+
+2018-05-05  David Tardon  <dtar...@redhat.com>  
[935cb58a61e45f441bdea143317a7d0d52c7f944]
+
+       WaE: unnecessary parentheses in declaration of ‘aligns’
+
+       Change-Id: Ic3cb38d071db8e3947c09a4b216b62d18e01b6aa
+
+2018-04-23  Caolán McNamara  <caol...@redhat.com>  
[9b78187ac2ccca0158cc9cc0bcc0576b457a78d7]
+
+       intial-creator->initial-creator
+
+       Change-Id: I6fe5d0732edb97ac7ff6d527f48543cab1bb3f7b
+       Reviewed-on: https://gerrit.libreoffice.org/53337
+       Reviewed-by: David Tardon <dtar...@redhat.com>
+       Tested-by: David Tardon <dtar...@redhat.com>
+
+2018-04-21  David Tardon  <dtar...@redhat.com>  
[94ca8aa8052ce6abf0420b0ac0fb5b949fbbc4b3]
+
+       bump version
+
+       Change-Id: I0512bc0abcf5a23c1b99918495622a3d874e75d6
+
 2018-04-21  David Tardon  <dtar...@redhat.com>  
[4e979303c9cc4412ccd5788e399941a823f6ac3c]
 
        prepare for a release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/NEWS new/libetonyek-0.1.9/NEWS
--- old/libetonyek-0.1.8/NEWS   2018-04-21 19:49:50.000000000 +0200
+++ new/libetonyek-0.1.9/NEWS   2018-12-29 09:15:39.000000000 +0100
@@ -1,3 +1,11 @@
+libetonyek 0.1.9
+
+- Fix spelling of property meta:initial-creator.
+- Support files created via iCloud Web Browser. (tdf#120707)
+- Remove unneeded check for additional glm headers, which was failing
+  with newest version(s) of glm.
+- Fix a couple of issues detected by oss-fuzz and forcepoint.
+
 libetonyek 0.1.8
 
 - All formats:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/compile new/libetonyek-0.1.9/compile
--- old/libetonyek-0.1.8/compile        2018-03-18 11:16:12.000000000 +0100
+++ new/libetonyek-0.1.9/compile        2018-12-24 15:10:44.000000000 +0100
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2016-01-11.22; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
 # Written by Tom Tromey <tro...@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -340,7 +340,7 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/config.h.in new/libetonyek-0.1.9/config.h.in
--- old/libetonyek-0.1.8/config.h.in    2018-03-18 14:53:10.000000000 +0100
+++ new/libetonyek-0.1.9/config.h.in    2018-12-29 09:17:15.000000000 +0100
@@ -1,5 +1,9 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
+/* Define to 1 if you have the <boost/algorithm/string/predicate.hpp> header
+   file. */
+#undef HAVE_BOOST_ALGORITHM_STRING_PREDICATE_HPP
+
 /* Define to 1 if you have the <boost/any.hpp> header file. */
 #undef HAVE_BOOST_ANY_HPP
 
@@ -56,9 +60,15 @@
 /* Define to 1 if the system has the `format' function attribute */
 #undef HAVE_FUNC_ATTRIBUTE_FORMAT
 
+/* Define to 1 if the system has the `visibility' function attribute */
+#undef HAVE_FUNC_ATTRIBUTE_VISIBILITY
+
 /* Define to 1 if the system has the GNU-style `fallthrough' attribute */
 #undef HAVE_GCC_ATTRIBUTE_FALLTHROUGH
 
+/* Define to 1 if you have the <glm/glm.hpp> header file. */
+#undef HAVE_GLM_GLM_HPP
+
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/configure.ac new/libetonyek-0.1.9/configure.ac
--- old/libetonyek-0.1.8/configure.ac   2018-03-18 14:51:31.000000000 +0100
+++ new/libetonyek-0.1.9/configure.ac   2018-12-29 09:15:33.000000000 +0100
@@ -7,7 +7,7 @@
 # ====================
 m4_define([libetonyek_version_major],[0])
 m4_define([libetonyek_version_minor],[1])
-m4_define([libetonyek_version_micro],[8])
+m4_define([libetonyek_version_micro],[9])
 
m4_define([libetonyek_version],[libetonyek_version_major.libetonyek_version_minor.libetonyek_version_micro])
 
 # =============
@@ -24,7 +24,7 @@
 # Configure options
 # =================
 AC_ARG_WITH([mdds],
-            AS_HELP_STRING([--with-mdds=1.2|1.0|0.x], [Specify which version 
of mdds to use (1.2 is the default)]),
+            AS_HELP_STRING([--with-mdds=1.4|1.2|1.0|0.x], [Specify which 
version of mdds to use (1.2 is the default)]),
             [], [with_mdds="1.2"])
 
 # ===========================
@@ -92,6 +92,7 @@
 saved_CPPFLAGS="${CPPFLAGS}"
 CPPFLAGS="${BOOST_CFLAGS} ${CPPFLAGS}"
 AC_CHECK_HEADERS(
+        boost/algorithm/string/predicate.hpp \
         boost/any.hpp \
         boost/container/deque.hpp \
         boost/cstdint.hpp \
@@ -118,14 +119,7 @@
 # ================
 saved_CPPFLAGS="${CPPFLAGS}"
 CPPFLAGS="${GLM_CFLAGS} ${CPPFLAGS}"
-GLM_headers="glm/glm.hpp"
-AS_IF([test "x$enable_tests" == "xyes"], [GLM_headers="$GLM_headers 
glm/gtx/io.hpp"], [])
-AC_CHECK_HEADERS(
-    [$GLM_headers],
-    [],
-    [AC_MSG_ERROR([Required glm headers not found.])],
-    []
-)
+AC_CHECK_HEADERS([glm/glm.hpp], [], [AC_MSG_ERROR([Required glm headers not 
found.])])
 CPPFLAGS="${saved_CPPFLAGS}"
 AC_SUBST([GLM_CFLAGS])
 
@@ -227,16 +221,12 @@
         AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
         saved_CXXFLAGS="$CXXFLAGS"
         CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
-        AC_TRY_COMPILE([], [],
-            [
-                AC_MSG_RESULT([yes])
-                CXXFLAGS="$CXXFLAGS -DLIBETONYEK_VISIBILITY"
-            ],
-            [
-                AC_MSG_RESULT([no])
-                CXXFLAGS="$saved_CXXFLAGS"
-            ]
-        )
+        AC_TRY_COMPILE([], [], [have_visibility=yes], [have_visibility=no])
+        AC_MSG_RESULT([$have_visibility])
+        CXXFLAGS="$saved_CXXFLAGS"
+        AX_GCC_FUNC_ATTRIBUTE([visibility])
+        AM_CONDITIONAL([HAVE_VISIBILITY],
+            [test "$have_visibility" = "yes" && test 
"$ax_cv_have_func_attribute_visibility" = "yes"])
     ]
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/missing new/libetonyek-0.1.9/missing
--- old/libetonyek-0.1.8/missing        2018-03-18 11:16:12.000000000 +0100
+++ new/libetonyek-0.1.9/missing        2018-12-24 15:10:44.000000000 +0100
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2016-01-11.22; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pin...@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -101,9 +101,9 @@
   exit $st
 fi
 
-perl_URL=http://www.perl.org/
-flex_URL=http://flex.sourceforge.net/
-gnu_software_URL=http://www.gnu.org/software
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
 
 program_details ()
 {
@@ -207,7 +207,7 @@
 exit $st
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/EtonyekDocument.cpp 
new/libetonyek-0.1.9/src/lib/EtonyekDocument.cpp
--- old/libetonyek-0.1.8/src/lib/EtonyekDocument.cpp    2018-04-20 
10:35:08.000000000 +0200
+++ new/libetonyek-0.1.9/src/lib/EtonyekDocument.cpp    2018-12-28 
19:07:46.000000000 +0100
@@ -10,8 +10,10 @@
 #include <libetonyek/libetonyek.h>
 
 #include <cassert>
+#include <cstring>
 #include <memory>
 
+#include <boost/algorithm/string/predicate.hpp>
 #include <boost/optional.hpp>
 
 #include <libxml/xmlreader.h>
@@ -22,6 +24,7 @@
 #include "IWASnappyStream.h"
 #include "IWORKPresentationRedirector.h"
 #include "IWORKSpreadsheetRedirector.h"
+#include "IWORKSubDirStream.h"
 #include "IWORKTextRedirector.h"
 #include "IWORKTokenizer.h"
 #include "IWORKZlibStream.h"
@@ -241,33 +244,90 @@
   return RVNGInputStreamPtr_t();
 }
 
-bool detect(const RVNGInputStreamPtr_t &input, DetectionInfo &info)
+bool detectBinary(RVNGInputStreamPtr_t input, DetectionInfo &info)
 {
-  if (input->isStructured())
-  {
+  assert(input->isStructured());
+
+  if (input->existsSubStream("Metadata/DocumentIdentifier"))
     info.m_package = input;
 
-    if ((info.m_format == FORMAT_BINARY) || (info.m_format == FORMAT_UNKNOWN))
+  if (input->existsSubStream("Index.zip"))
+  {
+    RVNGInputStreamPtr_t zipInput = getSubStream(input, "Index.zip");
+    if (bool(zipInput))
+      input = zipInput;
+  }
+
+  const bool hasDocument = input->existsSubStream("Index/Document.iwa");
+
+  if (hasDocument)
+  {
+    info.m_format = FORMAT_BINARY;
+    info.m_fragments = input;
+    info.m_input = getUncompressedSubStream(input, "Index/Document.iwa", true);
+  }
+
+  return hasDocument;
+}
+
+RVNGInputStreamPtr_t queryTopDirStream(const RVNGInputStreamPtr_t &input)
+{
+  assert(input->isStructured());
+
+  string top;
+
+  // find the common top level dir of all substream names, if there is one
+  for (unsigned i = 0; i < input->subStreamCount(); ++i)
+  {
+    const char *const path = input->subStreamName(i);
+    if (path)
     {
-      RVNGInputStreamPtr_t binaryInput(input);
-      const bool 
isPackage(binaryInput->existsSubStream("Metadata/DocumentIdentifier"));
-      if (binaryInput->existsSubStream("Index.zip"))
+      if (top.empty())
       {
-        RVNGInputStreamPtr_t zipInput = getSubStream(binaryInput, "Index.zip");
-        if (bool(zipInput))
-          binaryInput = zipInput;
+        // initialize top dir
+        const char *const pos = std::strchr(path, '/');
+        if (pos)
+          top.assign(path, pos - path);
+        else
+          top = path;
+      }
+      else
+      {
+        // check that the current path starts with top dir
+        if (!boost::starts_with(path, top))
+          return RVNGInputStreamPtr_t();
+        const char end = path[top.size()];
+        if (end != '/' && end != '\0')
+          return RVNGInputStreamPtr_t();
       }
-      info.m_fragments = binaryInput;
-      if (binaryInput->existsSubStream("Index/Document.iwa"))
+    }
+  }
+
+  RVNGInputStreamPtr_t stream;
+  if (!top.empty())
+    stream.reset(new IWORKSubDirStream(input, top));
+
+  return stream;
+}
+
+bool detect(const RVNGInputStreamPtr_t &input, DetectionInfo &info)
+{
+  if (input->isStructured())
+  {
+    if ((info.m_format == FORMAT_BINARY) || (info.m_format == FORMAT_UNKNOWN))
+    {
+      if (!detectBinary(input, info))
       {
-        if (!isPackage)
-          info.m_package.reset();
-        info.m_format = FORMAT_BINARY;
-        info.m_input = getUncompressedSubStream(binaryInput, 
"Index/Document.iwa", true);
+        RVNGInputStreamPtr_t dir = queryTopDirStream(input);
+        if (dir)
+          detectBinary(dir, info);
       }
     }
+
     if ((info.m_format == FORMAT_XML2) || (info.m_format == FORMAT_UNKNOWN))
     {
+      info.m_package = input;
+
       if ((info.m_type == EtonyekDocument::TYPE_KEYNOTE) || (info.m_type == 
EtonyekDocument::TYPE_UNKNOWN))
       {
         if (input->existsSubStream("index.apxl"))
@@ -301,6 +361,8 @@
 
     if (info.m_format == FORMAT_XML1 || info.m_format == FORMAT_UNKNOWN)
     {
+      info.m_package = input;
+
       if (input->existsSubStream("presentation.apxl"))
       {
         info.m_type = EtonyekDocument::TYPE_KEYNOTE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWAParser.cpp 
new/libetonyek-0.1.9/src/lib/IWAParser.cpp
--- old/libetonyek-0.1.8/src/lib/IWAParser.cpp  2018-04-20 20:04:16.000000000 
+0200
+++ new/libetonyek-0.1.9/src/lib/IWAParser.cpp  2018-12-28 19:07:46.000000000 
+0100
@@ -998,7 +998,14 @@
       if (get(type) == 1)
         path->appendMoveTo(get(coords).m_x, get(coords).m_y);
       else
+      {
+        if (path->empty())
+        {
+          ETONYEK_DEBUG_MSG(("IWAParser::parsePath: missing prior MoveTo 
subsequent LineTo\n", get(type) == 1 ? 'M' : 'L'));
+          return false;
+        }
         path->appendLineTo(get(coords).m_x, get(coords).m_y);
+      }
       break;
     }
     case 4 :
@@ -1676,7 +1683,7 @@
       auto align=get(properties.uint32(8));
       if (align<=2)
       {
-        const IWORKVerticalAlignment(aligns[])=
+        const IWORKVerticalAlignment aligns[] =
         {
           IWORK_VERTICAL_ALIGNMENT_TOP, IWORK_VERTICAL_ALIGNMENT_MIDDLE, 
IWORK_VERTICAL_ALIGNMENT_BOTTOM
         };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWORKCollector.cpp 
new/libetonyek-0.1.9/src/lib/IWORKCollector.cpp
--- old/libetonyek-0.1.8/src/lib/IWORKCollector.cpp     2018-04-21 
12:40:43.000000000 +0200
+++ new/libetonyek-0.1.9/src/lib/IWORKCollector.cpp     2018-12-28 
19:07:46.000000000 +0100
@@ -771,7 +771,7 @@
   if (!m_metadata.m_title.empty())
     props.insert("dc:subject", m_metadata.m_title.c_str());
   if (!m_metadata.m_author.empty())
-    props.insert("meta:intial-creator", m_metadata.m_author.c_str());
+    props.insert("meta:initial-creator", m_metadata.m_author.c_str());
   if (!m_metadata.m_keywords.empty())
     props.insert("meta:keyword", m_metadata.m_keywords.c_str());
   if (!m_metadata.m_comment.empty())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWORKPath.cpp 
new/libetonyek-0.1.9/src/lib/IWORKPath.cpp
--- old/libetonyek-0.1.8/src/lib/IWORKPath.cpp  2018-04-21 13:40:51.000000000 
+0200
+++ new/libetonyek-0.1.9/src/lib/IWORKPath.cpp  2018-12-28 19:07:46.000000000 
+0100
@@ -594,6 +594,11 @@
   m_impl->m_closed = false;
 }
 
+bool IWORKPath::empty() const
+{
+  return m_impl->m_path.empty();
+}
+
 void IWORKPath::appendMoveTo(const double x, const double y)
 {
   if (!m_impl->m_path.empty() && m_impl->m_path.back().size()<=1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWORKPath.h 
new/libetonyek-0.1.9/src/lib/IWORKPath.h
--- old/libetonyek-0.1.8/src/lib/IWORKPath.h    2018-03-18 15:10:11.000000000 
+0100
+++ new/libetonyek-0.1.9/src/lib/IWORKPath.h    2018-12-28 19:07:46.000000000 
+0100
@@ -42,6 +42,7 @@
   void swap(IWORKPath &other);
 
   void clear();
+  bool empty() const;
 
   void appendMoveTo(double x, double y);
   void appendLineTo(double x, double y);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWORKSpreadsheetRedirector.cpp 
new/libetonyek-0.1.9/src/lib/IWORKSpreadsheetRedirector.cpp
--- old/libetonyek-0.1.8/src/lib/IWORKSpreadsheetRedirector.cpp 2015-05-30 
08:31:59.000000000 +0200
+++ new/libetonyek-0.1.9/src/lib/IWORKSpreadsheetRedirector.cpp 2018-12-28 
20:03:27.000000000 +0100
@@ -70,9 +70,9 @@
   assert(0);
 }
 
-void IWORKSpreadsheetRedirector::setStyle(const librevenge::RVNGPropertyList 
&/*propList*/)
+void IWORKSpreadsheetRedirector::setStyle(const librevenge::RVNGPropertyList 
&propList)
 {
-  assert(0);
+  m_iface->defineGraphicStyle(propList);
 }
 
 void IWORKSpreadsheetRedirector::startLayer(const librevenge::RVNGPropertyList 
&/*propList*/)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWORKSubDirStream.cpp 
new/libetonyek-0.1.9/src/lib/IWORKSubDirStream.cpp
--- old/libetonyek-0.1.8/src/lib/IWORKSubDirStream.cpp  1970-01-01 
01:00:00.000000000 +0100
+++ new/libetonyek-0.1.9/src/lib/IWORKSubDirStream.cpp  2018-12-28 
19:07:46.000000000 +0100
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libetonyek project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "IWORKSubDirStream.h"
+
+#include <cassert>
+
+namespace libetonyek
+{
+
+namespace
+{
+
+std::string getDelimited(const std::string &path)
+{
+  if (path.empty() || path.back() == '/')
+    return path;
+  else
+    return path + '/';
+}
+
+}
+
+IWORKSubDirStream::IWORKSubDirStream(const RVNGInputStreamPtr_t &parent, const 
std::string &dir)
+  : m_parent(parent)
+  , m_dir(getDelimited(dir))
+{
+  assert(bool(m_parent));
+  assert(m_parent->isStructured());
+}
+
+IWORKSubDirStream::~IWORKSubDirStream()
+{
+}
+
+bool IWORKSubDirStream::isStructured()
+{
+  return true;
+}
+
+unsigned IWORKSubDirStream::subStreamCount()
+{
+  // TODO: implement me
+  return 0;
+}
+
+const char *IWORKSubDirStream::subStreamName(unsigned id)
+{
+  // TODO: implement me
+  (void) id;
+  return nullptr;
+}
+
+bool IWORKSubDirStream::existsSubStream(const char *name)
+{
+  const std::string path = m_dir + name;
+  return m_parent->existsSubStream(path.c_str());
+}
+
+librevenge::RVNGInputStream *IWORKSubDirStream::getSubStreamByName(const char 
*name)
+{
+  const std::string path = m_dir + name;
+  return m_parent->getSubStreamByName(path.c_str());
+}
+
+librevenge::RVNGInputStream *IWORKSubDirStream::getSubStreamById(unsigned id)
+{
+  // TODO: implement me
+  (void) id;
+  return nullptr;
+}
+
+const unsigned char *IWORKSubDirStream::read(const unsigned long, unsigned 
long &)
+{
+  return nullptr;
+}
+
+int IWORKSubDirStream::seek(long, const librevenge::RVNG_SEEK_TYPE)
+{
+  return 0;
+}
+
+long IWORKSubDirStream::tell()
+{
+  return 0;
+}
+
+bool IWORKSubDirStream::isEnd()
+{
+  return true;
+}
+
+}
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/IWORKSubDirStream.h 
new/libetonyek-0.1.9/src/lib/IWORKSubDirStream.h
--- old/libetonyek-0.1.8/src/lib/IWORKSubDirStream.h    1970-01-01 
01:00:00.000000000 +0100
+++ new/libetonyek-0.1.9/src/lib/IWORKSubDirStream.h    2018-12-28 
19:07:46.000000000 +0100
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libetonyek project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef IWORKSUBDIRSTREAM_H_INCLUDED
+#define IWORKSUBDIRSTREAM_H_INCLUDED
+
+#include <string>
+
+#include "libetonyek_utils.h"
+
+namespace libetonyek
+{
+
+class IWORKSubDirStream : public librevenge::RVNGInputStream
+{
+public:
+  IWORKSubDirStream(const RVNGInputStreamPtr_t &parent, const std::string 
&dir);
+  ~IWORKSubDirStream() override;
+
+  bool isStructured() override;
+  unsigned subStreamCount() override;
+  const char *subStreamName(unsigned id) override;
+  bool existsSubStream(const char *) override;
+
+  librevenge::RVNGInputStream *getSubStreamByName(const char *name) override;
+  librevenge::RVNGInputStream *getSubStreamById(unsigned id) override;
+
+  const unsigned char *read(unsigned long numBytes, unsigned long 
&numBytesRead) override;
+  int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType) override;
+  long tell() override;
+  bool isEnd() override;
+
+private:
+  const RVNGInputStreamPtr_t m_parent;
+  const std::string m_dir;
+};
+
+}
+
+#endif // IWORKSUBDIRSTREAM_H_INCLUDED
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/Makefile.am 
new/libetonyek-0.1.9/src/lib/Makefile.am
--- old/libetonyek-0.1.8/src/lib/Makefile.am    2018-03-18 15:10:09.000000000 
+0100
+++ new/libetonyek-0.1.9/src/lib/Makefile.am    2018-12-28 19:07:46.000000000 
+0100
@@ -23,6 +23,12 @@
        $(ZLIB_CFLAGS) \
        $(DEBUG_CXXFLAGS)
 
+if HAVE_VISIBILITY
+AM_CXXFLAGS += \
+       -DLIBETONYEK_VISIBILITY \
+       -fvisibility=hidden
+endif
+
 libetonyek_@ETONYEK_MAJOR_VERSION@_@ETONYEK_MINOR_VERSION@_la_LIBADD  = 
libetonyek_internal.la $(REVENGE_LIBS) $(LANGTAG_LIBS) $(XML_LIBS) $(ZLIB_LIBS) 
@LIBETONYEK_WIN32_RESOURCE@
 libetonyek_@ETONYEK_MAJOR_VERSION@_@ETONYEK_MINOR_VERSION@_la_DEPENDENCIES = 
libetonyek_internal.la @LIBETONYEK_WIN32_RESOURCE@
 libetonyek_@ETONYEK_MAJOR_VERSION@_@ETONYEK_MINOR_VERSION@_la_LDFLAGS = 
$(version_info) -export-dynamic -no-undefined
@@ -96,6 +102,8 @@
        IWORKStyle_fwd.h \
        IWORKStylesheet.cpp \
        IWORKStylesheet.h \
+       IWORKSubDirStream.cpp \
+       IWORKSubDirStream.h \
        IWORKTable.cpp \
        IWORKTable.h \
        IWORKTableRecorder.cpp \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/libetonyek.rc 
new/libetonyek-0.1.9/src/lib/libetonyek.rc
--- old/libetonyek-0.1.8/src/lib/libetonyek.rc  2018-03-18 16:16:49.000000000 
+0100
+++ new/libetonyek-0.1.9/src/lib/libetonyek.rc  2018-12-29 09:17:13.000000000 
+0100
@@ -1,8 +1,8 @@
 #include <winver.h>
 
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION 0,1,8,BUILDNUMBER
-  PRODUCTVERSION 0,1,8,0
+  FILEVERSION 0,1,9,BUILDNUMBER
+  PRODUCTVERSION 0,1,9,0
   FILEFLAGSMASK 0
   FILEFLAGS 0
   FILEOS VOS__WINDOWS32
@@ -15,12 +15,12 @@
       BEGIN
        VALUE "CompanyName", "The libetonyek developer community"
        VALUE "FileDescription", "libetonyek"
-       VALUE "FileVersion", "0.1.8.BUILDNUMBER"
+       VALUE "FileVersion", "0.1.9.BUILDNUMBER"
        VALUE "InternalName", "libetonyek-0.0"
        VALUE "LegalCopyright", "Copyright (C) 2013 David Tardon, other 
contributors"
        VALUE "OriginalFilename", "libetonyek-0.0.dll"
        VALUE "ProductName", "libetonyek"
-       VALUE "ProductVersion", "0.1.8"
+       VALUE "ProductVersion", "0.1.9"
       END
     END
     BLOCK "VarFileInfo"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/lib/libetonyek_utils.cpp 
new/libetonyek-0.1.9/src/lib/libetonyek_utils.cpp
--- old/libetonyek-0.1.8/src/lib/libetonyek_utils.cpp   2018-03-18 
15:10:10.000000000 +0100
+++ new/libetonyek-0.1.9/src/lib/libetonyek_utils.cpp   2018-12-28 
19:07:46.000000000 +0100
@@ -299,7 +299,7 @@
     const double x = stroke.m_pattern.m_values[0];
     const double y = stroke.m_pattern.m_values[1];
     // checkme: maybe we can use <sf:stroke ... sf:cap|butt ...>
-    if (((x / y) < 0.01) || ((y / x) < 0.01)) // arbitrarily picked constant
+    if (x != 0 && y != 0 && (((x / y) < 0.01) || ((y / x) < 0.01))) // 
arbitrarily picked constant
       border.append(" dotted");
     else
       border.append(" dashed");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/test/EtonyekDocumentTest.cpp 
new/libetonyek-0.1.9/src/test/EtonyekDocumentTest.cpp
--- old/libetonyek-0.1.8/src/test/EtonyekDocumentTest.cpp       2015-11-14 
12:27:24.000000000 +0100
+++ new/libetonyek-0.1.9/src/test/EtonyekDocumentTest.cpp       2018-12-28 
19:07:46.000000000 +0100
@@ -141,6 +141,7 @@
   assertSupportedPackage("pages5-package.pages", EXCELLENT, type);
   assertSupportedFile("pages5.zip", SUPPORTED_PART, type);
   assertSupportedFile("pages5-file.pages", EXCELLENT, type);
+  assertSupportedFile("pages5-extra-dir.pages", EXCELLENT, type);
 }
 
 void EtonyekDocumentTest::testUnsupported()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/test/IWORKSubDirStreamTest.cpp 
new/libetonyek-0.1.9/src/test/IWORKSubDirStreamTest.cpp
--- old/libetonyek-0.1.8/src/test/IWORKSubDirStreamTest.cpp     1970-01-01 
01:00:00.000000000 +0100
+++ new/libetonyek-0.1.9/src/test/IWORKSubDirStreamTest.cpp     2018-12-28 
19:07:46.000000000 +0100
@@ -0,0 +1,121 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libetonyek project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <string>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <libetonyek/libetonyek.h>
+
+#include <librevenge-stream/librevenge-stream.h>
+
+#include "IWORKSubDirStream.h"
+#include "libetonyek_utils.h"
+
+#if !defined ETONYEK_STREAMS_TEST_DIR
+#error ETONYEK_STREAMS_TEST_DIR not defined, cannot test
+#endif
+
+namespace test
+{
+
+using libetonyek::getLength;
+using libetonyek::IWORKSubDirStream;
+using libetonyek::RVNGInputStreamPtr_t;
+
+class IWASubDirStreamTest : public CPPUNIT_NS::TestFixture
+{
+public:
+  IWASubDirStreamTest();
+
+  virtual void setUp();
+  virtual void tearDown();
+
+private:
+  CPPUNIT_TEST_SUITE(IWASubDirStreamTest);
+  CPPUNIT_TEST(testSimple);
+  CPPUNIT_TEST(testDelimited);
+  CPPUNIT_TEST(testPassThrough);
+  CPPUNIT_TEST_SUITE_END();
+
+private:
+  void testSimple();
+  void testDelimited();
+  void testPassThrough();
+
+private:
+  RVNGInputStreamPtr_t m_stream;
+};
+
+IWASubDirStreamTest::IWASubDirStreamTest()
+  : m_stream()
+{
+}
+
+void IWASubDirStreamTest::setUp()
+{
+  m_stream.reset(new librevenge::RVNGFileStream(ETONYEK_STREAMS_TEST_DIR  
"/unsupported.zip"));
+}
+
+void IWASubDirStreamTest::tearDown()
+{
+  m_stream.reset();
+}
+
+void IWASubDirStreamTest::testSimple()
+{
+  RVNGInputStreamPtr_t stream{new IWORKSubDirStream(m_stream, "Index")};
+
+  CPPUNIT_ASSERT(stream->isStructured());
+
+  CPPUNIT_ASSERT(stream->existsSubStream("ViewState.iwa"));
+
+  RVNGInputStreamPtr_t subStream(stream->getSubStreamByName("ViewState.iwa"));
+  CPPUNIT_ASSERT(bool(subStream));
+  RVNGInputStreamPtr_t 
origSubStream(m_stream->getSubStreamByName("Index/ViewState.iwa"));
+  CPPUNIT_ASSERT(bool(origSubStream));
+  CPPUNIT_ASSERT_EQUAL(getLength(origSubStream), getLength(subStream));
+}
+
+void IWASubDirStreamTest::testDelimited()
+{
+  RVNGInputStreamPtr_t stream{new IWORKSubDirStream(m_stream, "Index/")};
+
+  CPPUNIT_ASSERT(stream->isStructured());
+
+  CPPUNIT_ASSERT(stream->existsSubStream("ViewState.iwa"));
+
+  RVNGInputStreamPtr_t subStream(stream->getSubStreamByName("ViewState.iwa"));
+  CPPUNIT_ASSERT(bool(subStream));
+  RVNGInputStreamPtr_t 
origSubStream(m_stream->getSubStreamByName("Index/ViewState.iwa"));
+  CPPUNIT_ASSERT(bool(origSubStream));
+  CPPUNIT_ASSERT_EQUAL(getLength(origSubStream), getLength(subStream));
+}
+
+void IWASubDirStreamTest::testPassThrough()
+{
+  RVNGInputStreamPtr_t stream{new IWORKSubDirStream(m_stream, "")};
+
+  CPPUNIT_ASSERT(stream->isStructured());
+
+  CPPUNIT_ASSERT(stream->existsSubStream("Index/ViewState.iwa"));
+
+  RVNGInputStreamPtr_t 
subStream(stream->getSubStreamByName("Index/ViewState.iwa"));
+  CPPUNIT_ASSERT(bool(subStream));
+  RVNGInputStreamPtr_t 
origSubStream(m_stream->getSubStreamByName("Index/ViewState.iwa"));
+  CPPUNIT_ASSERT(bool(origSubStream));
+  CPPUNIT_ASSERT_EQUAL(getLength(origSubStream), getLength(subStream));
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(IWASubDirStreamTest);
+
+}
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/libetonyek-0.1.8/src/test/Makefile.am 
new/libetonyek-0.1.9/src/test/Makefile.am
--- old/libetonyek-0.1.8/src/test/Makefile.am   2018-03-18 11:25:00.000000000 
+0100
+++ new/libetonyek-0.1.9/src/test/Makefile.am   2018-12-28 19:07:46.000000000 
+0100
@@ -1,4 +1,4 @@
-tests = test detection
+tests = core detection streams
 
 check_PROGRAMS = $(tests)
 check_LIBRARIES = libtest_driver.a
@@ -7,7 +7,7 @@
 libtest_driver_a_SOURCES = \
        test.cpp
 
-test_CPPFLAGS = \
+core_CPPFLAGS = \
        -I$(top_srcdir)/inc \
        -I$(top_srcdir)/src/lib \
        $(REVENGE_CFLAGS) \
@@ -15,11 +15,11 @@
        $(XML_CFLAGS) \
        $(GLM_CFLAGS) \
        $(MDDS_CFLAGS) \
-       $(LANGTAG_LIBS) \
+       $(LANGTAG_CFLAGS) \
        $(DEBUG_CXXFLAGS)
 
-test_LDFLAGS = -L$(top_builddir)/src/lib
-test_LDADD = \
+core_LDFLAGS = -L$(top_builddir)/src/lib
+core_LDADD = \
        libtest_driver.a \
        $(top_builddir)/src/lib/libetonyek_internal.la \
        $(REVENGE_LIBS) \
@@ -27,11 +27,10 @@
        $(LANGTAG_LIBS) \
        $(XML_LIBS)
 
-test_SOURCES = \
+core_SOURCES = \
        IWAFieldTest.cpp \
        IWAMessageTest.cpp \
        IWAReaderTest.cpp \
-       IWASnappyStreamTest.cpp \
        IWORKChainedTokenizerTest.cpp \
        IWORKFormulaTest.cpp \
        IWORKPathTest.cpp \
@@ -46,16 +45,42 @@
        TestProperties.h
 
 if WITH_LIBLANGTAG
-test_SOURCES += \
+core_SOURCES += \
        IWORKLanguageManagerTest.cpp
 endif
 
+streams_CPPFLAGS = \
+       -DETONYEK_STREAMS_TEST_DIR=\"$(top_srcdir)/src/test/data\" \
+       -I$(top_srcdir)/inc \
+       -I$(top_srcdir)/src/lib \
+       $(REVENGE_CFLAGS) \
+       $(REVENGE_STREAM_CFLAGS) \
+       $(CPPUNIT_CFLAGS) \
+       $(XML_CFLAGS) \
+       $(GLM_CFLAGS) \
+       $(MDDS_CFLAGS) \
+       $(LANGTAG_CFLAGS) \
+       $(DEBUG_CXXFLAGS)
+
+streams_LDFLAGS = -L$(top_builddir)/src/lib
+streams_LDADD = \
+       libtest_driver.a \
+       $(top_builddir)/src/lib/libetonyek_internal.la \
+       $(REVENGE_LIBS) \
+       $(REVENGE_STREAM_LIBS) \
+       $(CPPUNIT_LIBS) \
+       $(LANGTAG_LIBS) \
+       $(XML_LIBS)
+
+streams_SOURCES = \
+       IWASnappyStreamTest.cpp \
+       IWORKSubDirStreamTest.cpp
+
 detection_CPPFLAGS = \
        -DETONYEK_DETECTION_TEST_DIR=\"$(top_srcdir)/src/test/data\" \
        -I$(top_srcdir)/inc \
        $(REVENGE_STREAM_CFLAGS) \
        $(CPPUNIT_CFLAGS) \
-       $(XML_CFLAGS) \
        $(DEBUG_CXXFLAGS)
 
 detection_LDFLAGS = -L$(top_builddir)/src/lib
@@ -63,8 +88,7 @@
        libtest_driver.a \
        
$(top_builddir)/src/lib/libetonyek-@ETONYEK_MAJOR_VERSION@.@ETONYEK_MINOR_VERSION@.la
 \
        $(REVENGE_STREAM_LIBS) \
-       $(CPPUNIT_LIBS) \
-       $(XML_LIBS)
+       $(CPPUNIT_LIBS)
 
 detection_SOURCES = \
        EtonyekDocumentTest.cpp
@@ -90,6 +114,7 @@
        data/pages4-package.pages \
        data/pages4.xml \
        data/pages4.xml.gz \
+       data/pages5-extra-dir.pages \
        data/pages5-file.pages \
        data/pages5-package.pages \
        data/pages5.zip \
Binary files old/libetonyek-0.1.8/src/test/data/pages5-extra-dir.pages and 
new/libetonyek-0.1.9/src/test/data/pages5-extra-dir.pages differ


Reply via email to