1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
2de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// License. See LICENSE.TXT for details.
3de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
4de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// Tests OOM handling when there is a single large allocation.
5de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <assert.h>
6de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <cstdint>
7de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <cstdlib>
8de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <cstddef>
9de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <cstring>
10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <iostream>
11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <unistd.h>
12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarstatic volatile char *SinkPtr;
14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarextern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  if (Size > 0 && Data[0] == 'H') {
17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    if (Size > 1 && Data[1] == 'i') {
18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar      if (Size > 2 && Data[2] == '!') {
19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar        size_t kSize = (size_t)1 << 31;
20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar        char *p = new char[kSize];
21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar        memset(p, 0, kSize);
22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar        SinkPtr = p;
23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar        delete [] p;
24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar      }
25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    }
26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  }
27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  return 0;
28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar}
29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
30