Ignore:
Timestamp:
May 20, 2013, 2:10:19 PM (12 years ago)
Author:
[email protected]
Message:

Make C API more robust against null contexts
https://bugs.webkit.org/show_bug.cgi?id=116462

Reviewed by Anders Carlsson.

Handle null contexts in a non-crashy way. It's a bug to ever call the
API with a null context, and the absence of a context means we can't
produce a meaningful result, so we still assert in debug builds.

Now where possible we detect and early return, returning null for any
pointer type, NaN for doubles, and false for any boolean result.

  • API/JSBase.cpp:

(JSEvaluateScript):
(JSCheckScriptSyntax):
(JSReportExtraMemoryCost):

  • API/JSContextRef.cpp:

(JSContextGetGlobalObject):
(JSContextGetGroup):
(JSContextGetGlobalContext):
(JSContextCreateBacktrace):

  • API/JSObjectRef.cpp:

(JSObjectMake):
(JSObjectMakeFunctionWithCallback):
(JSObjectMakeConstructor):
(JSObjectMakeFunction):
(JSObjectMakeArray):
(JSObjectMakeDate):
(JSObjectMakeError):
(JSObjectMakeRegExp):
(JSObjectGetPrototype):
(JSObjectSetPrototype):
(JSObjectHasProperty):
(JSObjectGetProperty):
(JSObjectSetProperty):
(JSObjectGetPropertyAtIndex):
(JSObjectSetPropertyAtIndex):
(JSObjectDeleteProperty):
(JSObjectCopyPropertyNames):

  • API/JSValueRef.cpp:

(JSValueGetType):
(JSValueIsUndefined):
(JSValueIsNull):
(JSValueIsBoolean):
(JSValueIsNumber):
(JSValueIsString):
(JSValueIsObject):
(JSValueIsObjectOfClass):
(JSValueIsEqual):
(JSValueIsStrictEqual):
(JSValueIsInstanceOfConstructor):
(JSValueMakeUndefined):
(JSValueMakeNull):
(JSValueMakeBoolean):
(JSValueMakeNumber):
(JSValueMakeString):
(JSValueMakeFromJSONString):
(JSValueCreateJSONString):
(JSValueToBoolean):
(JSValueToNumber):
(JSValueToStringCopy):
(JSValueToObject):
(JSValueProtect):

  • API/JSWeakObjectMapRefPrivate.cpp:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSContextRef.cpp

    r149420 r150381  
    180180JSObjectRef JSContextGetGlobalObject(JSContextRef ctx)
    181181{
     182    if (!ctx) {
     183        ASSERT_NOT_REACHED();
     184        return 0;
     185    }
    182186    ExecState* exec = toJS(ctx);
    183187    APIEntryShim entryShim(exec);
     
    189193JSContextGroupRef JSContextGetGroup(JSContextRef ctx)
    190194{
     195    if (!ctx) {
     196        ASSERT_NOT_REACHED();
     197        return 0;
     198    }
    191199    ExecState* exec = toJS(ctx);
    192200    return toRef(&exec->vm());
     
    195203JSGlobalContextRef JSContextGetGlobalContext(JSContextRef ctx)
    196204{
     205    if (!ctx) {
     206        ASSERT_NOT_REACHED();
     207        return 0;
     208    }
    197209    ExecState* exec = toJS(ctx);
    198210    APIEntryShim entryShim(exec);
     
    203215JSStringRef JSContextCreateBacktrace(JSContextRef ctx, unsigned maxStackSize)
    204216{
     217    if (!ctx) {
     218        ASSERT_NOT_REACHED();
     219        return 0;
     220    }
    205221    ExecState* exec = toJS(ctx);
    206222    JSLockHolder lock(exec);
Note: See TracChangeset for help on using the changeset viewer.