Changeset 214618 in webkit


Ignore:
Timestamp:
Mar 30, 2017 1:17:08 PM (7 years ago)
Author:
eric.carlson@apple.com
Message:

[Crash] WebCore::AudioBuffer::AudioBuffer don't checking illegal value
https://bugs.webkit.org/show_bug.cgi?id=169956

Reviewed by Youenn Fablet.

Source/WebCore:

Test: webaudio/audiobuffer-crash.html

  • Modules/webaudio/AudioBuffer.cpp:

(WebCore::AudioBuffer::AudioBuffer): Invalidate the object and return early if the channel
array allocation fails.
(WebCore::AudioBuffer::AudioBuffer): Ditto.
(WebCore::AudioBuffer::invalidate): Invalidate the object.

  • Modules/webaudio/AudioBuffer.h:

LayoutTests:

  • webaudio/audiobuffer-crash-expected.txt: Added.
  • webaudio/audiobuffer-crash.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r214613 r214618  
     12017-03-30  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [Crash] WebCore::AudioBuffer::AudioBuffer don't checking illegal value
     4        https://bugs.webkit.org/show_bug.cgi?id=169956
     5
     6        Reviewed by Youenn Fablet.
     7
     8        * webaudio/audiobuffer-crash-expected.txt: Added.
     9        * webaudio/audiobuffer-crash.html: Added.
     10
    1112017-03-30  Simon Fraser  <simon.fraser@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r214614 r214618  
     12017-03-30  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [Crash] WebCore::AudioBuffer::AudioBuffer don't checking illegal value
     4        https://bugs.webkit.org/show_bug.cgi?id=169956
     5
     6        Reviewed by Youenn Fablet.
     7
     8        Test: webaudio/audiobuffer-crash.html
     9
     10        * Modules/webaudio/AudioBuffer.cpp:
     11        (WebCore::AudioBuffer::AudioBuffer): Invalidate the object and return early if the channel
     12        array allocation fails.
     13        (WebCore::AudioBuffer::AudioBuffer): Ditto.
     14        (WebCore::AudioBuffer::invalidate): Invalidate the object.
     15        * Modules/webaudio/AudioBuffer.h:
     16
    1172017-03-30  Antoine Quint  <graouts@apple.com>
    218
  • trunk/Source/WebCore/Modules/webaudio/AudioBuffer.cpp

    r208209 r214618  
    4444    if (sampleRate < 22050 || sampleRate > 96000 || numberOfChannels > AudioContext::maxNumberOfChannels() || !numberOfFrames)
    4545        return nullptr;
    46     return adoptRef(*new AudioBuffer(numberOfChannels, numberOfFrames, sampleRate));
     46
     47    auto buffer = adoptRef(*new AudioBuffer(numberOfChannels, numberOfFrames, sampleRate));
     48    if (!buffer->m_length)
     49        return nullptr;
     50
     51    return WTFMove(buffer);
    4752}
    4853
     
    6267
    6368    for (unsigned i = 0; i < numberOfChannels; ++i) {
    64         RefPtr<Float32Array> channelDataArray = Float32Array::create(m_length);
     69        auto channelDataArray = Float32Array::create(m_length);
     70        if (!channelDataArray) {
     71            invalidate();
     72            break;
     73        }
     74
    6575        channelDataArray->setNeuterable(false);
    66         m_channels.append(channelDataArray);
     76        m_channels.append(WTFMove(channelDataArray));
    6777    }
    6878}
     
    7787    for (unsigned i = 0; i < numberOfChannels; ++i) {
    7888        auto channelDataArray = Float32Array::create(m_length);
     89        if (!channelDataArray) {
     90            invalidate();
     91            break;
     92        }
     93
    7994        channelDataArray->setNeuterable(false);
    8095        channelDataArray->setRange(bus.channel(i)->data(), m_length, 0);
    8196        m_channels.append(WTFMove(channelDataArray));
    8297    }
     98}
     99
     100void AudioBuffer::invalidate()
     101{
     102    releaseMemory();
     103    m_length = 0;
    83104}
    84105
  • trunk/Source/WebCore/Modules/webaudio/AudioBuffer.h

    r207050 r214618  
    7070    explicit AudioBuffer(AudioBus&);
    7171
     72    void invalidate();
     73
    7274    double m_gain { 1.0 }; // scalar gain
    7375    float m_sampleRate;
Note: See TracChangeset for help on using the changeset viewer.