From 12dac70a32b49fa4fda574bb7908c15710aa734d Mon Sep 17 00:00:00 2001
From: Hans Leidekker <hans@codeweavers.com>
Date: Thu, 5 Mar 2009 12:11:30 +0100
Subject: [PATCH] mscms: Handle errors from lcms more gracefully.

Default behavior of lcms is to abort the process when it encounters
an error it considers fatal, such as a corrupt color profile.
---
 dlls/mscms/mscms_main.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/dlls/mscms/mscms_main.c b/dlls/mscms/mscms_main.c
index 00e2a753e87..3199c0b80ac 100644
--- a/dlls/mscms/mscms_main.c
+++ b/dlls/mscms/mscms_main.c
@@ -36,6 +36,23 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mscms);
 
+#ifdef HAVE_LCMS
+static int lcms_error_handler( int error, const char *text )
+{
+    switch (error)
+    {
+    case LCMS_ERRC_WARNING:
+    case LCMS_ERRC_RECOVERABLE:
+    case LCMS_ERRC_ABORTED:
+        WARN("%d %s\n", error, debugstr_a(text));
+        return 1;
+    default:
+        ERR("unknown error %d %s\n", error, debugstr_a(text));
+        return 0;
+    }
+}
+#endif
+
 BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
 {
     TRACE( "(%p, %d, %p)\n", hinst, reason, reserved );
@@ -44,6 +61,9 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
     {
     case DLL_PROCESS_ATTACH:
         DisableThreadLibraryCalls( hinst );
+#ifdef HAVE_LCMS
+        cmsSetErrorHandler( lcms_error_handler );
+#endif
         break;
     case DLL_PROCESS_DETACH:
 #ifdef HAVE_LCMS
-- 
GitLab