Changeset 196744 in webkit


Ignore:
Timestamp:
Feb 17, 2016 10:13:15 PM (8 years ago)
Author:
ddkilzer@apple.com
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.

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r196742 r196744  
     12016-02-17  David Kilzer  <ddkilzer@apple.com>
     2
     3        [Cocoa] Always check the return value of dlopen() and dlsym() in Release builds
     4        <http://webkit.org/b/154364>
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        * platform/mac/SoftLinking.h:
     9        (SOFT_LINK_LIBRARY): Change ASSERT_WITH_MESSAGE() to
     10        RELEASE_ASSERT_WITH_MESSAGE().
     11        (SOFT_LINK_FRAMEWORK): Ditto.
     12        (SOFT_LINK_PRIVATE_FRAMEWORK): Ditto.
     13        (SOFT_LINK_STAGED_FRAMEWORK): Ditto.
     14        (SOFT_LINK_FRAMEWORK_IN_UMBRELLA): Ditto.
     15        (SOFT_LINK): Ditto.
     16        (SOFT_LINK_POINTER): Ditto.
     17        (SOFT_LINK_CONSTANT): Ditto.
     18        (SOFT_LINK_FRAMEWORK_FOR_SOURCE): Add
     19        RELEASE_ASSERT_WITH_MESSAGE() when soft-link is not
     20        optional.
     21
    1222016-02-17  Chris Dumez  <cdumez@apple.com>
    223
  • trunk/Source/WebCore/platform/mac/SoftLinking.h

    r184799 r196744  
    3535    static void* lib##Library() \
    3636    { \
    37         static void* dylib = dlopen("/usr/lib/" #lib ".dylib", RTLD_NOW); \
    38         ASSERT_WITH_MESSAGE(dylib, "%s", dlerror()); \
     37        static void* dylib = ^{ \
     38            void *result = dlopen("/usr/lib/" #lib ".dylib", RTLD_NOW); \
     39            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
     40            return result; \
     41        }(); \
    3942        return dylib; \
    4043    }
     
    4346    static void* framework##Library() \
    4447    { \
    45         static void* frameworkLibrary = dlopen("/System/Library/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
    46         ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
     48        static void* frameworkLibrary = ^{ \
     49            void* result = dlopen("/System/Library/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
     50            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
     51            return result; \
     52        }(); \
    4753        return frameworkLibrary; \
    4854    }
     
    5157    static void* framework##Library() \
    5258    { \
    53         static void* frameworkLibrary = 0; \
    54         if (!frameworkLibrary) \
    55             frameworkLibrary = dlopen("/System/Library/PrivateFrameworks/" #framework ".framework/" #framework, RTLD_NOW); \
    56         ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
     59        static void* frameworkLibrary = ^{ \
     60            void* result = dlopen("/System/Library/PrivateFrameworks/" #framework ".framework/" #framework, RTLD_NOW); \
     61            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
     62            return result; \
     63        }(); \
    5764        return frameworkLibrary; \
    5865    }
     
    7986            if (!result) \
    8087                result = dlopen("/System/Library/StagedFrameworks/Safari/" #framework ".framework/Versions/" #version "/" #framework, RTLD_LAZY); \
     88            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
    8189            return result; \
    8290        }(); \
    83         ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
    8491        return frameworkLibrary; \
    8592    }
     
    8895    static void* framework##Library() \
    8996    { \
    90         static void* frameworkLibrary = dlopen("/System/Library/Frameworks/" #umbrella ".framework/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
    91         ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
     97        static void* frameworkLibrary = ^{ \
     98            void* result = dlopen("/System/Library/Frameworks/" #umbrella ".framework/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
     99            RELEASE_ASSERT_WITH_MESSAGE(result, "%s", dlerror()); \
     100            return result; \
     101        }(); \
    92102        return frameworkLibrary; \
    93103    }
     
    103113    { \
    104114        softLink##functionName = (resultType (*) parameterDeclarations) dlsym(framework##Library(), #functionName); \
    105         ASSERT_WITH_MESSAGE(softLink##functionName, "%s", dlerror()); \
     115        RELEASE_ASSERT_WITH_MESSAGE(softLink##functionName, "%s", dlerror()); \
    106116        return softLink##functionName parameterNames; \
    107117    } \
     
    216226    { \
    217227        void** pointer = static_cast<void**>(dlsym(framework##Library(), #name)); \
    218         ASSERT_WITH_MESSAGE(pointer, "%s", dlerror()); \
     228        RELEASE_ASSERT_WITH_MESSAGE(pointer, "%s", dlerror()); \
    219229        pointer##name = static_cast<type>(*pointer); \
    220230        get##name = name##Function; \
     
    254264    { \
    255265        void* constant = dlsym(framework##Library(), #name); \
    256         ASSERT_WITH_MESSAGE(constant, "%s", dlerror()); \
     266        RELEASE_ASSERT_WITH_MESSAGE(constant, "%s", dlerror()); \
    257267        constant##name = *static_cast<type*>(constant); \
    258268        get##name = name##Function; \
     
    309319        dispatch_once(&once, ^{ \
    310320            frameworkLibrary = dlopen("/System/Library/Frameworks/" #framework ".framework/" #framework, RTLD_NOW); \
     321            if (!isOptional) \
     322                RELEASE_ASSERT_WITH_MESSAGE(frameworkLibrary, "%s", dlerror()); \
    311323        }); \
    312324        ASSERT_WITH_MESSAGE_UNUSED(isOptional, isOptional || frameworkLibrary, "%s", dlerror()); \
Note: See TracChangeset for help on using the changeset viewer.