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:
parent
9ee64b5694
commit
2b269d4a49
3 changed files with 12 additions and 3 deletions
|
@ -32,6 +32,7 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<ReadableStreamDefaultReader>> ReadableStrea
|
||||||
|
|
||||||
ReadableStreamDefaultReader::ReadableStreamDefaultReader(JS::Realm& realm)
|
ReadableStreamDefaultReader::ReadableStreamDefaultReader(JS::Realm& realm)
|
||||||
: Bindings::PlatformObject(realm)
|
: Bindings::PlatformObject(realm)
|
||||||
|
, ReadableStreamGenericReaderMixin(realm)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
// 1. If this.[[stream]] is undefined, return a promise rejected with a TypeError exception.
|
||||||
if (!m_stream) {
|
if (!m_stream) {
|
||||||
auto& realm = stream()->realm();
|
auto exception = MUST_OR_THROW_OOM(JS::TypeError::create(m_realm, "No stream present to cancel"sv));
|
||||||
auto exception = MUST_OR_THROW_OOM(JS::TypeError::create(realm, "No stream present to cancel"sv));
|
auto promise_capability = WebIDL::create_rejected_promise(m_realm, exception);
|
||||||
auto promise_capability = WebIDL::create_rejected_promise(realm, exception);
|
|
||||||
return JS::NonnullGCPtr { verify_cast<JS::Promise>(*promise_capability->promise().ptr()) };
|
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()) };
|
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)
|
void ReadableStreamGenericReaderMixin::visit_edges(JS::Cell::Visitor& visitor)
|
||||||
{
|
{
|
||||||
visitor.visit(m_closed_promise);
|
visitor.visit(m_closed_promise);
|
||||||
|
|
|
@ -32,6 +32,8 @@ public:
|
||||||
virtual bool is_default_reader() const { return false; }
|
virtual bool is_default_reader() const { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
explicit ReadableStreamGenericReaderMixin(JS::Realm&);
|
||||||
|
|
||||||
void visit_edges(JS::Cell::Visitor&);
|
void visit_edges(JS::Cell::Visitor&);
|
||||||
|
|
||||||
// https://streams.spec.whatwg.org/#readablestreamgenericreader-closedpromise
|
// https://streams.spec.whatwg.org/#readablestreamgenericreader-closedpromise
|
||||||
|
@ -41,6 +43,8 @@ protected:
|
||||||
// https://streams.spec.whatwg.org/#readablestreamgenericreader-stream
|
// https://streams.spec.whatwg.org/#readablestreamgenericreader-stream
|
||||||
// A ReadableStream instance that owns this reader
|
// A ReadableStream instance that owns this reader
|
||||||
JS::GCPtr<ReadableStream> m_stream;
|
JS::GCPtr<ReadableStream> m_stream;
|
||||||
|
|
||||||
|
JS::Realm& m_realm;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue