提交 24b3a12e 编写于 作者: A Adam Barth

Throw exception for null listener in addEventListener

We appear to be missing a null check here as well.

R=ojan@chromium.org, esprehn@chromium.org

Review URL: https://codereview.chromium.org/937443002
上级 ee1f5c2c
......@@ -8,6 +8,7 @@
#include "sky/engine/core/events/Event.h"
#include "sky/engine/tonic/dart_api_scope.h"
#include "sky/engine/tonic/dart_error.h"
#include "sky/engine/tonic/dart_exception_factory.h"
#include "sky/engine/tonic/dart_gc_visitor.h"
#include "sky/engine/tonic/dart_isolate_scope.h"
......@@ -66,4 +67,18 @@ void DartEventListener::Finalize(void* isolate_callback_data,
listener->deref(); // Balances ref in DartEventListener::DartEventListener
}
PassRefPtr<EventListener>
DartConverter<EventListener*>::FromArgumentsWithNullCheck(
Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
Dart_Handle handle = Dart_GetNativeArgument(args, index);
if (Dart_IsNull(handle)) {
DartState* state = DartState::Current();
exception = state->exception_factory().CreateNullArgumentException(index);
return nullptr;
}
return FromDart(handle);
}
} // namespace blink
......@@ -51,12 +51,7 @@ struct DartConverter<EventListener*> {
static PassRefPtr<EventListener> FromArgumentsWithNullCheck(
Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
Dart_Handle handle = Dart_GetNativeArgument(args, index);
if (Dart_IsNull(handle))
return nullptr;
return FromDart(handle);
}
Dart_Handle& exception);
};
} // namespace blink
......
......@@ -7,6 +7,7 @@
#include "sky/engine/tonic/dart_converter.h"
#include "sky/engine/tonic/dart_builtin.h"
#include "sky/engine/wtf/text/StringBuilder.h"
namespace blink {
......@@ -17,6 +18,14 @@ DartExceptionFactory::DartExceptionFactory(DartState* dart_state)
DartExceptionFactory::~DartExceptionFactory() {
}
Dart_Handle DartExceptionFactory::CreateNullArgumentException(int index) {
StringBuilder message;
message.appendLiteral("Argument ");
message.appendNumber(index);
message.appendLiteral(" cannot be null.");
return CreateException("ArgumentError", message.toString());
}
Dart_Handle DartExceptionFactory::CreateException(const String& class_name,
const String& message) {
if (core_library_.is_empty()) {
......
......@@ -17,6 +17,7 @@ class DartExceptionFactory {
explicit DartExceptionFactory(DartState* dart_state);
~DartExceptionFactory();
Dart_Handle CreateNullArgumentException(int index);
Dart_Handle CreateException(const String& class_name, const String& message);
private:
......
......@@ -10,7 +10,6 @@
#include "sky/engine/tonic/dart_exception_factory.h"
#include "sky/engine/tonic/dart_state.h"
#include "sky/engine/tonic/dart_wrapper_info.h"
#include "sky/engine/wtf/text/StringBuilder.h"
namespace blink {
......@@ -79,12 +78,7 @@ DartWrappable* DartConverterWrappable::FromArgumentsWithNullCheck(
Dart_Handle handle = Dart_GetNativeArgument(args, index);
if (Dart_IsNull(handle)) {
DartState* state = DartState::Current();
StringBuilder message;
message.appendLiteral("Argument ");
message.appendNumber(index);
message.appendLiteral(" cannot be null.");
exception = state->exception_factory().CreateException("ArgumentError",
message.toString());
exception = state->exception_factory().CreateNullArgumentException(index);
return nullptr;
}
intptr_t native_fields[DartWrappable::kNumberOfNativeFields];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册