Title: [196744] trunk/Source/WebCore
Revision
196744
Author
[email protected]
Date
2016-02-17 22:13:15 -0800 (Wed, 17 Feb 2016)

Log Message

[Cocoa] Always check the return value of dlopen() and dlsym() in Release builds
<http://webkit.org/b/154364>

Reviewed by Alexey Proskuryakov.

* platform/mac/SoftLinking.h:
(SOFT_LINK_LIBRARY): Change ASSERT_WITH_MESSAGE() to
RELEASE_ASSERT_WITH_MESSAGE().
(SOFT_LINK_FRAMEWORK): Ditto.
(SOFT_LINK_PRIVATE_FRAMEWORK): Ditto.
(SOFT_LINK_STAGED_FRAMEWORK): Ditto.
(SOFT_LINK_FRAMEWORK_IN_UMBRELLA): Ditto.
(SOFT_LINK): Ditto.
(SOFT_LINK_POINTER): Ditto.
(SOFT_LINK_CONSTANT): Ditto.
(SOFT_LINK_FRAMEWORK_FOR_SOURCE): Add
RELEASE_ASSERT_WITH_MESSAGE() when soft-link is not
optional.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (196743 => 196744)


--- trunk/Source/WebCore/ChangeLog	2016-02-18 06:03:30 UTC (rev 196743)
+++ trunk/Source/WebCore/ChangeLog	2016-02-18 06:13:15 UTC (rev 196744)
@@ -1,3 +1,24 @@
+2016-02-17  David Kilzer  <[email protected]>
+
+        [Cocoa] Always check the return value of dlopen() and dlsym() in Release builds
+        <http://webkit.org/b/154364>
+
+        Reviewed by Alexey Proskuryakov.
+
+        * platform/mac/SoftLinking.h:
+        (SOFT_LINK_LIBRARY): Change ASSERT_WITH_MESSAGE() to
+        RELEASE_ASSERT_WITH_MESSAGE().
+        (SOFT_LINK_FRAMEWORK): Ditto.
+        (SOFT_LINK_PRIVATE_FRAMEWORK): Ditto.
+        (SOFT_LINK_STAGED_FRAMEWORK): Ditto.
+        (SOFT_LINK_FRAMEWORK_IN_UMBRELLA): Ditto.
+        (SOFT_LINK): Ditto.
+        (SOFT_LINK_POINTER): Ditto.
+        (SOFT_LINK_CONSTANT): Ditto.
+        (SOFT_LINK_FRAMEWORK_FOR_SOURCE): Add
+        RELEASE_ASSERT_WITH_MESSAGE() when soft-link is not
+        optional.
+
 2016-02-17  Chris Dumez  <[email protected]>
 
         Regression(r196648): http://w3c-test.org/html/dom/interfaces.html redirects at the end of the test

Modified: trunk/Source/WebCore/platform/mac/SoftLinking.h (196743 => 196744)


--- trunk/Source/WebCore/platform/mac/SoftLinking.h	2016-02-18 06:03:30 UTC (rev 196743)
+++ trunk/Source/WebCore/platform/mac/SoftLinking.h	2016-02-18 06:13:15 UTC (rev 196744)
@@ -34,26 +34,33 @@
 #define SOFT_LINK_LIBRARY(lib) \
     static void* lib##Library() \
     { \
-        static void* dylib = dlopen("/usr/lib/" #lib ".dylib", RTLD_NOW); \
-        ASSERT_WITH_MESSAGE(dylib, "%s", dlerror()); \
+        static void* dylib = ^{ \
+            void *result = dlopen("/usr/lib/" #lib ".dylib", RTLD_NOW); \
+            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
+            return result; \
+        }(); \
         return dylib; \
     }
 
 #define SOFT_LINK_FRAMEWORK(framework) \
     static void* framework##Library() \
     { \
-        static void* frameworkLibrary = dlopen("/System/Library/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
-        ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
+        static void* frameworkLibrary = ^{ \
+            void* result = dlopen("/System/Library/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
+            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
+            return result; \
+        }(); \
         return frameworkLibrary; \
     }
 
 #define SOFT_LINK_PRIVATE_FRAMEWORK(framework) \
     static void* framework##Library() \
     { \
-        static void* frameworkLibrary = 0; \
-        if (!frameworkLibrary) \
-            frameworkLibrary = dlopen("/System/Library/PrivateFrameworks/" #framework ".framework/" #framework, RTLD_NOW); \
-        ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
+        static void* frameworkLibrary = ^{ \
+            void* result = dlopen("/System/Library/PrivateFrameworks/" #framework ".framework/" #framework, RTLD_NOW); \
+            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
+            return result; \
+        }(); \
         return frameworkLibrary; \
     }
 
@@ -78,17 +85,20 @@
             void* result = dlopen("/System/Library/" #unstagedLocation "/" #framework ".framework/Versions/" #version "/" #framework, RTLD_LAZY); \
             if (!result) \
                 result = dlopen("/System/Library/StagedFrameworks/Safari/" #framework ".framework/Versions/" #version "/" #framework, RTLD_LAZY); \
+            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
             return result; \
         }(); \
-        ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
         return frameworkLibrary; \
     }
 
 #define SOFT_LINK_FRAMEWORK_IN_UMBRELLA(umbrella, framework) \
     static void* framework##Library() \
     { \
-        static void* frameworkLibrary = dlopen("/System/Library/Frameworks/" #umbrella ".framework/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
-        ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
+        static void* frameworkLibrary = ^{ \
+            void* result = dlopen("/System/Library/Frameworks/" #umbrella ".framework/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
+            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
+            return result; \
+        }(); \
         return frameworkLibrary; \
     }
 
@@ -102,7 +112,7 @@
     static resultType init##functionName parameterDeclarations \
     { \
         softLink##functionName = (resultType (*) parameterDeclarations) dlsym(framework##Library(), #functionName); \
-        ASSERT_WITH_MESSAGE(softLink##functionName, "%s", dlerror()); \
+        RELEASE_ASSERT_WITH_MESSAGE(softLink##functionName, "%s", dlerror()); \
         return softLink##functionName parameterNames; \
     } \
     \
@@ -215,7 +225,7 @@
     static type init##name() \
     { \
         void** pointer = static_cast<void**>(dlsym(framework##Library(), #name)); \
-        ASSERT_WITH_MESSAGE(pointer, "%s", dlerror()); \
+        RELEASE_ASSERT_WITH_MESSAGE(pointer, "%s", dlerror()); \
         pointer##name = static_cast<type>(*pointer); \
         get##name = name##Function; \
         return pointer##name; \
@@ -253,7 +263,7 @@
     static type init##name() \
     { \
         void* constant = dlsym(framework##Library(), #name); \
-        ASSERT_WITH_MESSAGE(constant, "%s", dlerror()); \
+        RELEASE_ASSERT_WITH_MESSAGE(constant, "%s", dlerror()); \
         constant##name = *static_cast<type*>(constant); \
         get##name = name##Function; \
         return constant##name; \
@@ -308,6 +318,8 @@
         static dispatch_once_t once; \
         dispatch_once(&once, ^{ \
             frameworkLibrary = dlopen("/System/Library/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
+            if (!isOptional) \
+                RELEASE_ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
         }); \
         ASSERT_WITH_MESSAGE_UNUSED(isOptional, isOptional || frameworkLibrary, "%s", dlerror()); \
         return frameworkLibrary; \
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to