1 /* Copyright (c) 2014, Google Inc.
3 * Permission to use, copy, modify, and/or distribute this software for any
4 * purpose with or without fee is hereby granted, provided that the above
5 * copyright notice and this permission notice appear in all copies.
7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
17 #include <openssl/crypto.h>
18 #include <openssl/err.h>
19 #include <openssl/mem.h>
22 static int test_overflow(void) {
25 for (i = 0; i < ERR_NUM_ERRORS*2; i++) {
26 ERR_put_error(1, 2, 3, "test", 1);
29 for (i = 0; i < ERR_NUM_ERRORS - 1; i++) {
30 if (ERR_get_error() == 0) {
31 fprintf(stderr, "ERR_get_error failed at %u\n", i);
36 if (ERR_get_error() != 0) {
37 fprintf(stderr, "ERR_get_error more than the expected number of values.\n");
44 static int test_put_error(void) {
45 uint32_t packed_error;
47 const char *file, *data;
49 if (ERR_get_error() != 0) {
50 fprintf(stderr, "ERR_get_error returned value before an error was added.\n");
54 ERR_put_error(1, 2, 3, "test", 4);
55 ERR_add_error_data(1, "testing");
57 packed_error = ERR_get_error_line_data(&file, &line, &data, &flags);
58 if (strcmp(file, "test") != 0 ||
60 (flags & ERR_FLAG_STRING) == 0 ||
61 ERR_GET_LIB(packed_error) != 1 ||
62 ERR_GET_FUNC(packed_error) != 2 ||
63 ERR_GET_REASON(packed_error) != 3 ||
64 strcmp(data, "testing") != 0) {
65 fprintf(stderr, "Bad error data returned.\n");
72 static int test_clear_error(void) {
73 if (ERR_get_error() != 0) {
74 fprintf(stderr, "ERR_get_error returned value before an error was added.\n");
78 ERR_put_error(1, 2, 3, "test", 4);
81 if (ERR_get_error() != 0) {
82 fprintf(stderr, "Error remained after clearing.\n");
89 static int test_print(void) {
92 uint32_t packed_error;
94 ERR_put_error(1, 2, 3, "test", 4);
95 ERR_add_error_data(1, "testing");
96 packed_error = ERR_get_error();
98 for (i = 0; i <= sizeof(buf); i++) {
99 ERR_error_string_n(packed_error, buf, i);
105 static int test_release(void) {
106 ERR_put_error(1, 2, 3, "test", 4);
107 ERR_remove_thread_state(NULL);
112 CRYPTO_library_init();
114 if (!test_overflow() ||
116 !test_clear_error() ||