summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Figuière <hub@figuiere.net>2017-01-22 15:44:00 -0500
committerHubert Figuière <hub@figuiere.net>2017-01-23 00:00:34 -0500
commit49bac10e1b823b50da29860944b8fae30bf05711 (patch)
tree95917f880ef96fcb12e53f82b524c54f7b05626b
parent535aa9d7d0b605492e8b6e927244d77404dff025 (diff)
2.4.x: Bug 99494 - Restore error propagation
Register a global Error callback that will make error being thrown
-rw-r--r--exempi/exempi.cpp11
-rw-r--r--exempi/tests/testparse.cpp3
2 files changed, 11 insertions, 3 deletions
diff --git a/exempi/exempi.cpp b/exempi/exempi.cpp
index 5392047..6857df9 100644
--- a/exempi/exempi.cpp
+++ b/exempi/exempi.cpp
@@ -183,6 +183,13 @@ int xmp_get_error()
#endif
}
+// the error callback - force throwing exceptions
+static bool _xmp_error_callback(void* context, XMP_ErrorSeverity severity,
+ XMP_Int32 cause, XMP_StringPtr message)
+{
+ return false;
+}
+
bool xmp_init()
{
RESET_ERROR;
@@ -192,7 +199,9 @@ bool xmp_init()
// text
// conversion
// the one that was done in Exempi with libiconv.
- return SXMPFiles::Initialize(kXMPFiles_IgnoreLocalText);
+ bool result = SXMPFiles::Initialize(kXMPFiles_IgnoreLocalText);
+ SXMPMeta::SetDefaultErrorCallback(&_xmp_error_callback, nullptr, 1);
+ return result;
}
catch (const XMP_Error &e) {
set_error(e);
diff --git a/exempi/tests/testparse.cpp b/exempi/tests/testparse.cpp
index c979a89..f3a42df 100644
--- a/exempi/tests/testparse.cpp
+++ b/exempi/tests/testparse.cpp
@@ -62,8 +62,7 @@ int test_main(int argc, char *argv[])
XmpPtr xmp = xmp_new_empty();
- // TODO current xmp_parse will succeed with invalid XML
- BOOST_CHECK(xmp_parse(xmp, buffer, len));
+ BOOST_CHECK(!xmp_parse(xmp, buffer, len));
BOOST_CHECK(xmp != NULL);