Changeset 269030 in webkit
- Timestamp:
- Oct 27, 2020, 4:24:48 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
platform/graphics/gstreamer/eme/CDMThunder.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r269027 r269030 1 2020-10-27 Xabier Rodriguez Calvar <calvaris@igalia.com> 2 3 [EME][GStreamer][Thunder] Make response parsing message more robust 4 https://bugs.webkit.org/show_bug.cgi?id=218172 5 6 Reviewed by Philippe Normand. 7 8 ParsedResponseMessage checks now for empty buffers and we assert 9 on that in the code. We also add some other checks that could 10 trigger crashes if failed. 11 12 No new tests needed, just a rework. 13 14 * platform/graphics/gstreamer/eme/CDMThunder.cpp: 15 (WebCore::ParsedResponseMessage::ParsedResponseMessage): 16 (WebCore::ParsedResponseMessage::isValid const): 17 (WebCore::ParsedResponseMessage::operator bool const): 18 (WebCore::ParsedResponseMessage::operator! const): 19 (WebCore::CDMInstanceSessionThunder::challengeGeneratedCallback): 20 (WebCore::CDMInstanceSessionThunder::updateLicense): 21 (WebCore::CDMInstanceSessionThunder::loadSession): 22 (WebCore::CDMInstanceSessionThunder::removeSessionData): 23 1 24 2020-10-27 Tetsuharu Ohzeki <tetsuharu.ohzeki@gmail.com> 2 25 -
trunk/Source/WebCore/platform/graphics/gstreamer/eme/CDMThunder.cpp
r268975 r269030 311 311 ParsedResponseMessage(const RefPtr<SharedBuffer>& buffer) 312 312 { 313 if (!buffer )313 if (!buffer || !buffer->size()) 314 314 return; 315 315 316 GST_DEBUG("parsing buffer of size %zu", buffer->size()); 317 GST_MEMDUMP("buffer", buffer->dataAsUInt8Ptr(), buffer->size()); 318 316 319 StringView payload(reinterpret_cast<const LChar*>(buffer->data()), buffer->size()); 317 StringViewtype(reinterpret_cast<const LChar*>(":Type:"), 6);320 static NeverDestroyed<StringView> type(reinterpret_cast<const LChar*>(":Type:"), 6); 318 321 size_t typePosition = payload.find(type, 0); 319 322 StringView requestType(payload.characters8(), typePosition != notFound ? typePosition : 0); … … 326 329 327 330 m_payload = SharedBuffer::create(payload.characters8() + offset, payload.length() - offset); 328 } 329 331 332 m_isValid = true; 333 } 334 335 bool isValid() const { return m_isValid; } 330 336 bool hasPayload() const { return static_cast<bool>(m_payload); } 331 337 const Ref<SharedBuffer>& payload() const& { ASSERT(m_payload); return m_payload.value(); } … … 334 340 WebCore::MediaKeyMessageType type() const { ASSERT(m_type); return m_type.value(); } 335 341 WebCore::MediaKeyMessageType typeOr(WebCore::MediaKeyMessageType alternate) const { return m_type ? m_type.value() : alternate; } 342 explicit operator bool() const { return m_isValid; } 343 bool operator!() const { return !m_isValid; } 336 344 337 345 private: 346 bool m_isValid { false }; 338 347 Optional<Ref<SharedBuffer>> m_payload; 339 348 Optional<WebCore::MediaKeyMessageType> m_type; … … 343 352 { 344 353 ParsedResponseMessage parsedResponseMessage(buffer); 354 ASSERT(parsedResponseMessage); 345 355 346 356 if (!m_challengeCallbacks.isEmpty()) { 347 357 m_message = WTFMove(parsedResponseMessage.payload()); 348 m_needsIndividualization = parsedResponseMessage.type() == CDMInstanceSession::MessageType::IndividualizationRequest; 358 m_needsIndividualization = parsedResponseMessage.hasType() 359 && parsedResponseMessage.type() == CDMInstanceSession::MessageType::IndividualizationRequest; 349 360 350 361 for (const auto& challengeCallback : m_challengeCallbacks) … … 529 540 // will even be other parts of the spec where not having structured data will be bad. 530 541 ParsedResponseMessage parsedResponseMessage(responseMessage); 542 ASSERT(parsedResponseMessage); 531 543 if (parsedResponseMessage.hasPayload()) { 532 544 Ref<SharedBuffer> message = WTFMove(parsedResponseMessage.payload()); … … 563 575 // will even be other parts of the spec where not having structured data will be bad. 564 576 ParsedResponseMessage parsedResponseMessage(responseMessage); 577 ASSERT(parsedResponseMessage); 565 578 if (parsedResponseMessage.hasPayload()) { 566 579 Ref<SharedBuffer> message = WTFMove(parsedResponseMessage.payload()); … … 609 622 else { 610 623 ParsedResponseMessage parsedResponseMessage(buffer); 624 ASSERT(parsedResponseMessage); 611 625 if (parsedResponseMessage.hasPayload()) { 612 626 Ref<SharedBuffer> message = WTFMove(parsedResponseMessage.payload());
Note:
See TracChangeset
for help on using the changeset viewer.