Changeset 199042 in webkit
- Timestamp:
- Apr 4, 2016, 10:39:18 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
platform/audio/ios/AudioDestinationIOS.cpp (modified) (2 diffs)
-
platform/audio/ios/AudioDestinationIOS.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r199039 r199042 1 2016-04-04 Jer Noble <jer.noble@apple.com> 2 3 [iOS] Crash when playing <video> after playing Web Audio 4 https://bugs.webkit.org/show_bug.cgi?id=156185 5 <rdar://problem/10177005> 6 7 Reviewed by Eric Carlson. 8 9 Off-by-one error in AudioDestinationIOS::render. The ivars m_firstSpareFrame and m_lastSpareFrame imply that 10 the sample range is inclusive, i.e. [m_firstSpareFrame .. m_lastSpareFrame], but the length of the range was 11 being calculated as if m_lastSpareFrame was exclusive; when the two were equal, the length was calculated as 12 0, rather than 1. This was caught by an ASSERT (and would have been caught by a downstream ASSERT had that one 13 not been present). 14 15 Fix the off-by-one by treating them as inclusive/exclusive--similar to C++ iterators--and renaming them to reflect 16 this: [m_startSpareFrame .. m_endSpareFrame). This corrects the "length" math which caused the crash. 17 18 * platform/audio/ios/AudioDestinationIOS.cpp: 19 (WebCore::AudioDestinationIOS::render): 20 * platform/audio/ios/AudioDestinationIOS.h: 21 1 22 2016-04-04 John Wilander <wilander@apple.com> 2 23 -
trunk/Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp
r198850 r199042 219 219 UInt32 frameOffset = 0; 220 220 while (framesRemaining > 0) { 221 if (m_ firstSpareFrame && m_lastSpareFrame) {222 ASSERT(m_ firstSpareFrame < m_lastSpareFrame);223 UInt32 framesThisTime = m_ lastSpareFrame - m_firstSpareFrame;221 if (m_startSpareFrame && m_endSpareFrame) { 222 ASSERT(m_startSpareFrame < m_endSpareFrame); 223 UInt32 framesThisTime = m_endSpareFrame - m_startSpareFrame; 224 224 assignAudioBuffersToBus(buffers, *m_renderBus, numberOfBuffers, numberOfFrames, frameOffset, framesThisTime); 225 m_renderBus->copyFromRange(*m_spareBus, m_ firstSpareFrame, m_lastSpareFrame);225 m_renderBus->copyFromRange(*m_spareBus, m_startSpareFrame, m_endSpareFrame); 226 226 frameOffset += framesThisTime; 227 227 framesRemaining -= framesThisTime; 228 m_ firstSpareFrame = 0;229 m_ lastSpareFrame = 0;228 m_startSpareFrame = 0; 229 m_endSpareFrame = 0; 230 230 } 231 231 … … 236 236 m_callback.render(0, m_spareBus.get(), kRenderBufferSize); 237 237 m_renderBus->copyFromRange(*m_spareBus, 0, framesThisTime); 238 m_ firstSpareFrame = framesThisTime;239 m_ lastSpareFrame = kRenderBufferSize - 1;238 m_startSpareFrame = framesThisTime; 239 m_endSpareFrame = kRenderBufferSize; 240 240 } else 241 241 m_callback.render(0, m_renderBus.get(), framesThisTime); -
trunk/Source/WebCore/platform/audio/ios/AudioDestinationIOS.h
r198035 r199042 67 67 RefPtr<AudioBus> m_renderBus; 68 68 RefPtr<AudioBus> m_spareBus; 69 unsigned m_ firstSpareFrame { 0 };70 unsigned m_ lastSpareFrame { 0 };69 unsigned m_startSpareFrame { 0 }; 70 unsigned m_endSpareFrame { 0 }; 71 71 72 72 double m_sampleRate;
Note:
See TracChangeset
for help on using the changeset viewer.