diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ef1996eb1..d88206072 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -27,6 +27,7 @@ jobs:
brew unlink python@3.10 || true
brew unlink python@3.11 || true
brew unlink python@3.12 || true
+ brew unlink xz
- name: Cache
uses: actions/cache@v4
id: cache
@@ -45,6 +46,9 @@ jobs:
- name: Build xml-security-c
if: steps.cache.outputs.cache-hit != 'true'
run: ./prepare_osx_build_environment.sh xmlsec ${{ matrix.target }}
+ - name: Build libxml2
+ if: steps.cache.outputs.cache-hit != 'true'
+ run: ./prepare_osx_build_environment.sh libxml2 ${{ matrix.target }}
- name: Move to cache
if: steps.cache.outputs.cache-hit != 'true'
run: |
@@ -84,7 +88,7 @@ jobs:
- name: Install Deps
run: |
dnf install -y --setopt=install_weak_deps=False \
- git gcc-c++ cmake rpm-build xml-security-c-devel zlib-devel vim-common doxygen boost-test swig python3-devel java-1.8.0-openjdk-devel xsd minizip-devel
+ git gcc-c++ cmake rpm-build xml-security-c-devel libxml2-devel zlib-devel vim-common doxygen boost-test swig python3-devel java-1.8.0-openjdk-devel xsd minizip-devel
- name: Install CMake
if: matrix.container == 'fedora:39'
run: |
@@ -118,7 +122,7 @@ jobs:
DEBEMAIL: github-actions@github.com
steps:
- name: Install dependencies
- run: apt update -qq && apt install --no-install-recommends -y git lsb-release fakeroot build-essential devscripts debhelper cmake xxd xsdcxx libxml-security-c-dev zlib1g-dev doxygen swig openjdk-8-jdk-headless libpython3-dev python3-distutils libboost-test-dev lintian
+ run: apt update -qq && apt install --no-install-recommends -y git lsb-release fakeroot build-essential devscripts debhelper cmake xxd xsdcxx libxml-security-c-dev libxml2-dev zlib1g-dev doxygen swig openjdk-8-jdk-headless libpython3-dev python3-distutils libboost-test-dev lintian
- name: Checkout
uses: actions/checkout@v4
with:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f457a90a1..ff84c4349 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,6 +48,7 @@ find_package(OpenSSL 1.1.1 REQUIRED)
find_package(PKCS11)
#find_package(PoDoFo)
find_package(Threads)
+find_package(LibXml2 REQUIRED)
find_package(XmlSecurityC REQUIRED)
find_package(XSD 4.0 REQUIRED)
find_package(ZLIB REQUIRED)
diff --git a/README.md b/README.md
index f41cfd455..2cc400e92 100644
--- a/README.md
+++ b/README.md
@@ -16,9 +16,9 @@
1. Install dependencies
# Ubuntu
- sudo apt install cmake xxd libxml-security-c-dev xsdcxx libssl-dev zlib1g-dev
+ sudo apt install cmake xxd libxml-security-c-dev xsdcxx libxml2-dev libssl-dev zlib1g-dev
# Fedora
- sudo dnf install cmake gcc-c++ openssl-devel xerces-c-devel xml-security-c-devel xsd zlib-devel vim-common
+ sudo dnf install cmake gcc-c++ openssl-devel xerces-c-devel xml-security-c-devel xsd libxml2-devel zlib-devel vim-common
* doxygen - Optional, for API documentation
* libboost-test-dev - Optional, for unittests
diff --git a/libdigidocpp.wxs b/libdigidocpp.wxs
index 8b6452d2e..d10d203e3 100644
--- a/libdigidocpp.wxs
+++ b/libdigidocpp.wxs
@@ -63,6 +63,7 @@
+
diff --git a/prepare_osx_build_environment.sh b/prepare_osx_build_environment.sh
index 7c9b02225..7869d874c 100755
--- a/prepare_osx_build_environment.sh
+++ b/prepare_osx_build_environment.sh
@@ -6,7 +6,7 @@ XALAN_DIR=xalan_c-1.12
XMLSEC_DIR=xml-security-c-2.0.4
XSD=xsd-4.0.0-i686-macosx
OPENSSL_DIR=openssl-3.0.13
-LIBXML2_DIR=libxml2-2.11.5
+LIBXML2_DIR=libxml2-2.12.5
ANDROID_NDK=android-ndk-r26b
FREETYPE_DIR=freetype-2.10.1
FONTCONFIG_DIR=fontconfig-2.13.1
@@ -232,11 +232,11 @@ function libxml2 {
return 0
;;
esac
- if [ ! -f ${LIBXML2_DIR}.tar.gz ]; then
- curl -O -L http://xmlsoft.org/sources/${LIBXML2_DIR}.tar.gz
+ if [ ! -f ${LIBXML2_DIR}.tar.xz ]; then
+ curl -O -L https://download.gnome.org/sources/libxml2/2.12/${LIBXML2_DIR}.tar.xz
fi
rm -rf ${LIBXML2_DIR}
- tar xf ${LIBXML2_DIR}.tar.gz
+ tar xf ${LIBXML2_DIR}.tar.xz
cd ${LIBXML2_DIR}
./configure --prefix=${TARGET_PATH} ${CONFIGURE} --without-python
# Android is missing glob.h
@@ -429,6 +429,7 @@ case "$@" in
openssl
xalan
xml_security
+ libxml2
;;
*)
echo "Usage:"
diff --git a/src/ASiContainer.cpp b/src/ASiContainer.cpp
index 6efcd1ffb..dd623ab09 100644
--- a/src/ASiContainer.cpp
+++ b/src/ASiContainer.cpp
@@ -165,14 +165,14 @@ unique_ptr ASiContainer::dataStream(const string &path, const ZipSeria
*/
void ASiContainer::addDataFile(const string &path, const string &mediaType)
{
- string fileName = File::fileName(path);
+ string fileName(File::fileName(path));
addDataFileChecks(fileName, mediaType);
if(!File::fileExists(path))
THROW("Document file '%s' does not exist.", path.c_str());
ZipSerialize::Properties prop { appInfo(), File::modifiedTime(path), File::fileSize(path) };
bool useTempFile = prop.size > MAX_MEM_FILE;
- zproperty(File::fileName(path), std::move(prop));
+ zproperty(fileName, std::move(prop));
unique_ptr is;
if(useTempFile)
{
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 634aa8877..3e7062466 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,8 +14,6 @@ configure_file( ${CMAKE_SOURCE_DIR}/etc/digidocpp.conf.cmake digidocpp.conf )
set(SCHEMA_DIR ${CMAKE_SOURCE_DIR}/etc/schema)
set(XML_DIR ${CMAKE_CURRENT_BINARY_DIR}/xml)
-XSD_SCHEMA( xsd_SRCS IGNORE ${XML_DIR} ${SCHEMA_DIR}/conf.xsd
- --root-element configuration )
XSD_SCHEMA( xsd_SRCS IGNORE ${XML_DIR} ${SCHEMA_DIR}/OpenDocument_manifest.xsd
--root-element manifest
--namespace-map urn:oasis:names:tc:opendocument:xmlns:manifest:1.0=digidoc::manifest )
@@ -161,6 +159,7 @@ add_library(digidocpp_priv STATIC
xml/SecureDOMParser.cpp
xml/UnsignedSignaturePropertiesType.cpp
xml/URIResolver.cpp
+ xml/XMLDocument.h
)
set_target_properties(digidocpp_util digidocpp_priv PROPERTIES
@@ -183,6 +182,7 @@ target_link_libraries(digidocpp_priv
digidocpp_util
XmlSecurityC::XmlSecurityC
ZLIB::ZLIB
+ LibXml2::LibXml2
$<$:Ws2_32>
)
diff --git a/src/Container.cpp b/src/Container.cpp
index 8592a5d35..22c4a7888 100644
--- a/src/Container.cpp
+++ b/src/Container.cpp
@@ -30,6 +30,8 @@
#include "util/File.h"
#include "util/log.h"
+#include
+
DIGIDOCPP_WARNING_PUSH
DIGIDOCPP_WARNING_DISABLE_CLANG("-Wnull-conversion")
DIGIDOCPP_WARNING_DISABLE_MSVC(4005)
@@ -188,6 +190,7 @@ void digidoc::terminate()
XMLPlatformUtils::Terminate();
util::File::deleteTempFiles();
+ xmlCleanupParser();
} catch (...) {
// Don't throw on terminate
}
diff --git a/src/SiVaContainer.cpp b/src/SiVaContainer.cpp
index 250086d50..a4eb39b54 100644
--- a/src/SiVaContainer.cpp
+++ b/src/SiVaContainer.cpp
@@ -149,7 +149,7 @@ SiVaContainer::SiVaContainer(const string &path, ContainerOpenCB *cb, bool useHa
{
DEBUG("SiVaContainer::SiVaContainer(%s, %d)", path.c_str(), useHashCode);
unique_ptr ifs = make_unique(File::encodeName(d->path = path), ifstream::binary);
- auto fileName = File::fileName(path);
+ string fileName(File::fileName(path));
istream *is = ifs.get();
if(File::fileExtension(path, {"ddoc"}))
{
diff --git a/src/XmlConf.cpp b/src/XmlConf.cpp
index 81631a8b4..4f1f4f1bc 100644
--- a/src/XmlConf.cpp
+++ b/src/XmlConf.cpp
@@ -22,59 +22,36 @@
#include "crypto/X509Cert.h"
#include "util/File.h"
#include "util/log.h"
-#include "xml/conf.hxx"
+#include "xml/XMLDocument.h"
-#include
+#include
+
+#include