brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 7295f03 Raw
42 lines · cpp
1//===-- ClangdFuzzer.cpp - Fuzz clangd ------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// This file implements a function that runs clangd on a single input.11/// This function is then linked into the Fuzzer library.12///13//===----------------------------------------------------------------------===//14 15#include "ClangdLSPServer.h"16#include "ClangdServer.h"17#include "support/ThreadsafeFS.h"18#include <cstdio>19 20using namespace clang::clangd;21 22extern "C" int LLVMFuzzerTestOneInput(uint8_t *Data, size_t Size) {23  if (Size == 0)24    return 0;25 26  // fmemopen isn't portable, but I think we only run the fuzzer on Linux.27  std::FILE *In = fmemopen(Data, Size, "r");28  auto Transport = newJSONTransport(In, llvm::nulls(),29                                    /*InMirror=*/nullptr, /*Pretty=*/false,30                                    /*Style=*/JSONStreamStyle::Delimited);31  RealThreadsafeFS FS;32  CodeCompleteOptions CCOpts;33  ClangdLSPServer::Options Opts;34  Opts.CodeComplete.EnableSnippets = false;35  Opts.UseDirBasedCDB = false;36 37  // Initialize and run ClangdLSPServer.38  ClangdLSPServer LSPServer(*Transport, FS, Opts);39  LSPServer.run();40  return 0;41}42