/*
 * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

#include <string.h>
#include <openssl/bio.h>
#include <openssl/crypto.h>

#include "testutil.h"

/* __has_feature is a clang-ism, while __SANITIZE_ADDRESS__ is a gcc-ism */
#if defined(__has_feature)
# if __has_feature(address_sanitizer)
#  define __SANITIZE_ADDRESS__ 1
# endif
#endif
/* If __SANITIZE_ADDRESS__ isn't defined, define it to be false */
#ifndef __SANITIZE_ADDRESS__
# define __SANITIZE_ADDRESS__ 0
#endif

/*
 * We use a proper main function here instead of the custom main from the
 * test framework to avoid CRYPTO_mem_leaks stuff.
 */

int main(int argc, char *argv[])
{
#if __SANITIZE_ADDRESS__
    int exitcode = EXIT_SUCCESS;
#else
    /*
     * When we don't sanitize, we set the exit code to what we would expect
     * to get when we are sanitizing.  This makes it easy for wrapper scripts
     * to detect that we get the result we expect.
     */
    int exitcode = EXIT_FAILURE;
#endif
    char *lost;

    lost = OPENSSL_malloc(3);
    if (!TEST_ptr(lost))
        return EXIT_FAILURE;

    strcpy(lost, "ab");

    if (argv[1] && strcmp(argv[1], "freeit") == 0) {
        OPENSSL_free(lost);
        exitcode = EXIT_SUCCESS;
    }

    lost = NULL;
    return exitcode;
}
