Blame test/sanitytest.c

Packit Service 084de1
/*
Packit Service 084de1
 * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
 *
Packit Service 084de1
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
 * this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
 * in the file LICENSE in the source distribution or at
Packit Service 084de1
 * https://www.openssl.org/source/license.html
Packit Service 084de1
 */
Packit Service 084de1
Packit Service 084de1
#include <string.h>
Packit Service 084de1
#include "testutil.h"
Packit Service 084de1
#include "internal/numbers.h"
Packit Service 084de1
Packit Service 084de1
static int test_sanity_null_zero(void)
Packit Service 084de1
{
Packit Service 084de1
    char *p;
Packit Service 084de1
    char bytes[sizeof(p)];
Packit Service 084de1
Packit Service 084de1
    /* Is NULL equivalent to all-bytes-zero? */
Packit Service 084de1
    p = NULL;
Packit Service 084de1
    memset(bytes, 0, sizeof(bytes));
Packit Service 084de1
    return TEST_mem_eq(&p, sizeof(p), bytes, sizeof(bytes));
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_sanity_enum_size(void)
Packit Service 084de1
{
Packit Service 084de1
    enum smallchoices { sa, sb, sc };
Packit Service 084de1
    enum medchoices { ma, mb, mc, md, me, mf, mg, mh, mi, mj, mk, ml };
Packit Service 084de1
    enum largechoices {
Packit Service 084de1
        a01, b01, c01, d01, e01, f01, g01, h01, i01, j01,
Packit Service 084de1
        a02, b02, c02, d02, e02, f02, g02, h02, i02, j02,
Packit Service 084de1
        a03, b03, c03, d03, e03, f03, g03, h03, i03, j03,
Packit Service 084de1
        a04, b04, c04, d04, e04, f04, g04, h04, i04, j04,
Packit Service 084de1
        a05, b05, c05, d05, e05, f05, g05, h05, i05, j05,
Packit Service 084de1
        a06, b06, c06, d06, e06, f06, g06, h06, i06, j06,
Packit Service 084de1
        a07, b07, c07, d07, e07, f07, g07, h07, i07, j07,
Packit Service 084de1
        a08, b08, c08, d08, e08, f08, g08, h08, i08, j08,
Packit Service 084de1
        a09, b09, c09, d09, e09, f09, g09, h09, i09, j09,
Packit Service 084de1
        a10, b10, c10, d10, e10, f10, g10, h10, i10, j10,
Packit Service 084de1
        xxx };
Packit Service 084de1
Packit Service 084de1
    /* Enum size */
Packit Service 084de1
    if (!TEST_size_t_eq(sizeof(enum smallchoices), sizeof(int))
Packit Service 084de1
        || !TEST_size_t_eq(sizeof(enum medchoices), sizeof(int))
Packit Service 084de1
        || !TEST_size_t_eq(sizeof(enum largechoices), sizeof(int)))
Packit Service 084de1
        return 0;
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_sanity_twos_complement(void)
Packit Service 084de1
{
Packit Service 084de1
    /* Basic two's complement checks. */
Packit Service 084de1
    if (!TEST_int_eq(~(-1), 0)
Packit Service 084de1
        || !TEST_long_eq(~(-1L), 0L))
Packit Service 084de1
        return 0;
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_sanity_sign(void)
Packit Service 084de1
{
Packit Service 084de1
    /* Check that values with sign bit 1 and value bits 0 are valid */
Packit Service 084de1
    if (!TEST_int_eq(-(INT_MIN + 1), INT_MAX)
Packit Service 084de1
        || !TEST_long_eq(-(LONG_MIN + 1), LONG_MAX))
Packit Service 084de1
        return 0;
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_sanity_unsigned_conversion(void)
Packit Service 084de1
{
Packit Service 084de1
    /* Check that unsigned-to-signed conversions preserve bit patterns */
Packit Service 084de1
    if (!TEST_int_eq((int)((unsigned int)INT_MAX + 1), INT_MIN)
Packit Service 084de1
        || !TEST_long_eq((long)((unsigned long)LONG_MAX + 1), LONG_MIN))
Packit Service 084de1
        return 0;
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_sanity_range(void)
Packit Service 084de1
{
Packit Service 084de1
    /* This isn't possible to check using the framework functions */
Packit Service 084de1
    if (SIZE_MAX < INT_MAX) {
Packit Service 084de1
        TEST_error("int must not be wider than size_t");
Packit Service 084de1
        return 0;
Packit Service 084de1
    }
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_sanity_memcmp(void)
Packit Service 084de1
{
Packit Service 084de1
    return CRYPTO_memcmp("ab","cd",2);
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
int setup_tests(void)
Packit Service 084de1
{
Packit Service 084de1
    ADD_TEST(test_sanity_null_zero);
Packit Service 084de1
    ADD_TEST(test_sanity_enum_size);
Packit Service 084de1
    ADD_TEST(test_sanity_twos_complement);
Packit Service 084de1
    ADD_TEST(test_sanity_sign);
Packit Service 084de1
    ADD_TEST(test_sanity_unsigned_conversion);
Packit Service 084de1
    ADD_TEST(test_sanity_range);
Packit Service 084de1
    ADD_TEST(test_sanity_memcmp);
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1