Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db3fa654 authored by Pawin Vongmasa's avatar Pawin Vongmasa Committed by Jessica Wagantall
Browse files

SampleTable.cpp: Fixed a regression caused by a fix for bug 28076789.

Detail: Before the original fix
(Id207f369ab7b27787d83f5d8fc48dc53ed9fcdc9) for 28076789, the
code allowed a time-to-sample table size to be 0. The change
made in that fix disallowed such situation, which in fact should
be allowed. This current patch allows it again while maintaining
the security of the previous fix.

Bug: 28288202
Bug: 28076789
Ticket: CYNGNOS-2707

Change-Id: I1c9a60c7f0cfcbd3d908f24998dde15d5136a295
parent 72003209
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -121,6 +121,7 @@ SampleTable::SampleTable(const sp<DataSource> &source)
      mSampleSizeFieldSize(0),
      mSampleSizeFieldSize(0),
      mDefaultSampleSize(0),
      mDefaultSampleSize(0),
      mNumSampleSizes(0),
      mNumSampleSizes(0),
      mHasTimeToSample(false),
      mTimeToSampleCount(0),
      mTimeToSampleCount(0),
      mTimeToSample(),
      mTimeToSample(),
      mSampleTimeEntries(NULL),
      mSampleTimeEntries(NULL),
@@ -159,7 +160,7 @@ bool SampleTable::isValid() const {
    return mChunkOffsetOffset >= 0
    return mChunkOffsetOffset >= 0
        && mSampleToChunkOffset >= 0
        && mSampleToChunkOffset >= 0
        && mSampleSizeOffset >= 0
        && mSampleSizeOffset >= 0
        && !mTimeToSample.empty();
        && mHasTimeToSample;
}
}


status_t SampleTable::setChunkOffsetParams(
status_t SampleTable::setChunkOffsetParams(
@@ -324,7 +325,7 @@ status_t SampleTable::setSampleSizeParams(


status_t SampleTable::setTimeToSampleParams(
status_t SampleTable::setTimeToSampleParams(
        off64_t data_offset, size_t data_size) {
        off64_t data_offset, size_t data_size) {
    if (!mTimeToSample.empty() || data_size < 8) {
    if (mHasTimeToSample || data_size < 8) {
        return ERROR_MALFORMED;
        return ERROR_MALFORMED;
    }
    }


@@ -363,6 +364,8 @@ status_t SampleTable::setTimeToSampleParams(
    for (size_t i = 0; i < mTimeToSample.size(); ++i) {
    for (size_t i = 0; i < mTimeToSample.size(); ++i) {
        mTimeToSample.editItemAt(i) = ntohl(mTimeToSample[i]);
        mTimeToSample.editItemAt(i) = ntohl(mTimeToSample[i]);
    }
    }

    mHasTimeToSample = true;
    return OK;
    return OK;
}
}


+1 −0
Original line number Original line Diff line number Diff line
@@ -111,6 +111,7 @@ private:
    uint32_t mDefaultSampleSize;
    uint32_t mDefaultSampleSize;
    uint32_t mNumSampleSizes;
    uint32_t mNumSampleSizes;


    bool mHasTimeToSample;
    uint32_t mTimeToSampleCount;
    uint32_t mTimeToSampleCount;
    Vector<uint32_t> mTimeToSample;
    Vector<uint32_t> mTimeToSample;