// Break through a series of strcmp.
#include <cstring>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cassert>

bool Eq(const uint8_t *Data, size_t Size, const char *Str) {
  char Buff[1024];
  size_t Len = strlen(Str);
  if (Size < Len) return false;
  if (Len >= sizeof(Buff)) return false;
  memcpy(Buff, (char*)Data, Len);
  Buff[Len] = 0;
  int res = strcmp(Buff, Str);
  return res == 0;
}

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
  if (Eq(Data, Size, "AAA") &&
      Size >= 3 && Eq(Data + 3, Size - 3, "BBBB") &&
      Size >= 7 && Eq(Data + 7, Size - 7, "CCCCCC") &&
      Size >= 14 && Data[13] == 42
    ) {
    fprintf(stderr, "BINGO\n");
    exit(1);
  }
  return 0;
}
