1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 08:57:34 +00:00

LibWeb: Fix a blatant nullptr dereference in ReadableStreamGenericReader

This commit is contained in:
Matthew Olsson 2023-04-25 18:29:13 -07:00 committed by Andreas Kling
parent 9ee64b5694
commit 2b269d4a49
3 changed files with 12 additions and 3 deletions

View file

@ -32,6 +32,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStreamDefaultReader>> ReadableStrea
ReadableStreamDefaultReader::ReadableStreamDefaultReader(JS::Realm& realm)
: Bindings::PlatformObject(realm)
, ReadableStreamGenericReaderMixin(realm)
{
}

View file

@ -26,9 +26,8 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<JS::Promise>> ReadableStreamGenericReaderMi
{
// 1. If this.[[stream]] is undefined, return a promise rejected with a TypeError exception.
if (!m_stream) {
auto& realm = stream()->realm();
auto exception = MUST_OR_THROW_OOM(JS::TypeError::create(realm, "No stream present to cancel"sv));
auto promise_capability = WebIDL::create_rejected_promise(realm, exception);
auto exception = MUST_OR_THROW_OOM(JS::TypeError::create(m_realm, "No stream present to cancel"sv));
auto promise_capability = WebIDL::create_rejected_promise(m_realm, exception);
return JS::NonnullGCPtr { verify_cast<JS::Promise>(*promise_capability->promise().ptr()) };
}
@ -37,6 +36,11 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<JS::Promise>> ReadableStreamGenericReaderMi
return JS::NonnullGCPtr { verify_cast<JS::Promise>(*promise_capability->promise().ptr()) };
}
ReadableStreamGenericReaderMixin::ReadableStreamGenericReaderMixin(JS::Realm& realm)
: m_realm(realm)
{
}
void ReadableStreamGenericReaderMixin::visit_edges(JS::Cell::Visitor& visitor)
{
visitor.visit(m_closed_promise);

View file

@ -32,6 +32,8 @@ public:
virtual bool is_default_reader() const { return false; }
protected:
explicit ReadableStreamGenericReaderMixin(JS::Realm&);
void visit_edges(JS::Cell::Visitor&);
// https://streams.spec.whatwg.org/#readablestreamgenericreader-closedpromise
@ -41,6 +43,8 @@ protected:
// https://streams.spec.whatwg.org/#readablestreamgenericreader-stream
// A ReadableStream instance that owns this reader
JS::GCPtr<ReadableStream> m_stream;
JS::Realm& m_realm;
};
}