mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 12:04:38 +08:00
ea7a952c8a
Detects if leak sanitizing is on, and directs the exit code accordingly. Note that this program is designed to fail when leaking, as that's expected, so to make it easy for wrapper scripts, we also make it look like it fails when sanitizing isn't on. Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/9294)
60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
/*
|
|
* 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;
|
|
}
|