fuzz/certDN_target.cc
author Franziskus Kiefer <franziskuskiefer@gmail.com>
Mon, 02 Oct 2017 14:45:49 +0200
changeset 13617 ffe09c48221c90d66411834e7da1f852fd2af24a
parent 13069 dbbf303cf467441dc813cdd99dd1e1867506021b
permissions -rw-r--r--
Bug 1404911 - make AEAD destructor virtual, r=mt Differential Revision: https://phabricator.services.mozilla.com/D90

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include <string>

#include "shared.h"

#define TEST_FUNCTION(f) \
  out = f(certName);     \
  free(out);

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  std::string name(data, data + size);

  assert(SECOID_Init() == SECSuccess);

  CERTName* certName = CERT_AsciiToName(name.c_str());
  if (certName) {
    char* out;
    TEST_FUNCTION(CERT_NameToAscii)
    TEST_FUNCTION(CERT_GetCertEmailAddress)

    // These functions call CERT_GetNameElement with different OIDs.
    // Unfotunately CERT_GetNameElement is not accesible from here.
    TEST_FUNCTION(CERT_GetCertUid)
    TEST_FUNCTION(CERT_GetCommonName)
    TEST_FUNCTION(CERT_GetCountryName)
    TEST_FUNCTION(CERT_GetDomainComponentName)
    TEST_FUNCTION(CERT_GetLocalityName)
    TEST_FUNCTION(CERT_GetOrgName)
    TEST_FUNCTION(CERT_GetOrgUnitName)
    TEST_FUNCTION(CERT_GetStateName)

    out = CERT_NameToAsciiInvertible(certName, CERT_N2A_READABLE);
    free(out);
    out = CERT_NameToAsciiInvertible(certName, CERT_N2A_STRICT);
    free(out);
    out = CERT_NameToAsciiInvertible(certName, CERT_N2A_INVERTIBLE);
    free(out);
  }
  CERT_DestroyName(certName);

  return 0;
}