Home | History | Annotate | Download | only in fuzz
      1 /* Copyright 2017 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 #include <assert.h>
      7 #include <stddef.h>
      8 #include <stdint.h>
      9 
     10 extern "C" {
     11 #include "cras_iodev_list.h"
     12 #include "cras_mix.h"
     13 #include "cras_observer.h"
     14 #include "cras_rclient.h"
     15 #include "cras_shm.h"
     16 #include "cras_system_state.h"
     17 }
     18 
     19 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
     20   cras_rclient *client = cras_rclient_create(0, 0);
     21   cras_rclient_buffer_from_client(client, data, size, -1);
     22   cras_rclient_destroy(client);
     23 
     24   return 0;
     25 }
     26 
     27 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
     28   char *shm_name;
     29   if (asprintf(&shm_name, "/cras-%d", getpid()) < 0)
     30     exit(-ENOMEM);
     31   struct cras_server_state *exp_state = (struct cras_server_state *)
     32     calloc(1, sizeof(*exp_state));
     33   if (!exp_state)
     34     exit(-1);
     35   int rw_shm_fd = open("/dev/null", O_RDWR);
     36   int ro_shm_fd = open("/dev/null", O_RDONLY);
     37   cras_system_state_init("/tmp",
     38                          shm_name,
     39                          rw_shm_fd,
     40                          ro_shm_fd,
     41                          exp_state,
     42                          sizeof(*exp_state));
     43   free(shm_name);
     44 
     45   cras_observer_server_init();
     46   cras_mix_init(0);
     47   cras_iodev_list_init();
     48 
     49   return 0;
     50 }
     51