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

Commit e8161a15 authored by S Vasudev Prasad's avatar S Vasudev Prasad
Browse files

Codec2Fuzzer: Updated BufferSource parsing logic

Test: mmm frameworks/av/media/codec2/fuzzer
Bug: 178467473

Change-Id: I73a90ba7a733a3b87e730ac3df4e571a1a7f3eca
parent c1bdb2cc
Loading
Loading
Loading
Loading
+2 −3
Original line number Original line Diff line number Diff line
@@ -148,9 +148,8 @@ bool Codec2Fuzzer::initDecoder() {
  std::vector<std::tuple<C2String, C2ComponentFactory::CreateCodec2FactoryFunc,
  std::vector<std::tuple<C2String, C2ComponentFactory::CreateCodec2FactoryFunc,
        C2ComponentFactory::DestroyCodec2FactoryFunc>> codec2FactoryFunc;
        C2ComponentFactory::DestroyCodec2FactoryFunc>> codec2FactoryFunc;


  codec2FactoryFunc.emplace_back(std::make_tuple(C2COMPONENTNAME,
  codec2FactoryFunc.emplace_back(
                                                &CreateCodec2Factory,
      std::make_tuple(C2COMPONENTNAME, &CreateCodec2Factory, &DestroyCodec2Factory));
                                                &DestroyCodec2Factory));


  std::shared_ptr<C2ComponentStore> componentStore = GetTestComponentStore(codec2FactoryFunc);
  std::shared_ptr<C2ComponentStore> componentStore = GetTestComponentStore(codec2FactoryFunc);
  if (!componentStore) {
  if (!componentStore) {
+15 −4
Original line number Original line Diff line number Diff line
@@ -59,8 +59,9 @@ class Codec2Fuzzer {
 private:
 private:
  class BufferSource {
  class BufferSource {
   public:
   public:
    BufferSource(const uint8_t* data, size_t size)
    BufferSource(const uint8_t* data, size_t size) : mData(data), mSize(size) {
        : mData(data), mSize(size), mReadIndex(size - kMarkerSize) {}
      mReadIndex = (size <= kMarkerSize) ? 0 : (size - kMarkerSize);
    }
    ~BufferSource() {
    ~BufferSource() {
      mData = nullptr;
      mData = nullptr;
      mSize = 0;
      mSize = 0;
@@ -72,10 +73,20 @@ class Codec2Fuzzer {
    FrameData getFrame();
    FrameData getFrame();


   private:
   private:
    bool isMarker() { return (memcmp(&mData[mReadIndex], kMarker, kMarkerSize) == 0); }
    bool isMarker() {
      if ((kMarkerSize < mSize) && (mReadIndex < mSize - kMarkerSize)) {
        return (memcmp(&mData[mReadIndex], kMarker, kMarkerSize) == 0);
      } else {
        return false;
      }
    }


    bool isCSDMarker(size_t position) {
    bool isCSDMarker(size_t position) {
      if ((kMarkerSuffixSize < mSize) && (position < mSize - kMarkerSuffixSize)) {
        return (memcmp(&mData[position], kCsdMarkerSuffix, kMarkerSuffixSize) == 0);
        return (memcmp(&mData[position], kCsdMarkerSuffix, kMarkerSuffixSize) == 0);
      } else {
        return false;
      }
    }
    }


    bool searchForMarker();
    bool searchForMarker();