diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/regress/lib/libcrypto/exdata/exdata_test.c | 68 |
1 files changed, 59 insertions, 9 deletions
diff --git a/src/regress/lib/libcrypto/exdata/exdata_test.c b/src/regress/lib/libcrypto/exdata/exdata_test.c index d90418610b..22483f7061 100644 --- a/src/regress/lib/libcrypto/exdata/exdata_test.c +++ b/src/regress/lib/libcrypto/exdata/exdata_test.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: exdata_test.c,v 1.1 2023/12/27 12:34:32 jsing Exp $ */ | 1 | /* $OpenBSD: exdata_test.c,v 1.2 2024/03/25 10:41:36 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -30,6 +30,10 @@ ex_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, | |||
| 30 | { | 30 | { |
| 31 | long *arg = argp; | 31 | long *arg = argp; |
| 32 | 32 | ||
| 33 | if (ptr != NULL) { | ||
| 34 | fprintf(stderr, "FAIL: ex_new() called with ptr != NULL\n"); | ||
| 35 | return 0; | ||
| 36 | } | ||
| 33 | if (argl != 1234 || *arg != 1234) { | 37 | if (argl != 1234 || *arg != 1234) { |
| 34 | fprintf(stderr, "FAIL: ex_new() with bad arguments\n"); | 38 | fprintf(stderr, "FAIL: ex_new() with bad arguments\n"); |
| 35 | return 0; | 39 | return 0; |
| @@ -78,7 +82,7 @@ struct exdata { | |||
| 78 | static int | 82 | static int |
| 79 | ex_data_test(void) | 83 | ex_data_test(void) |
| 80 | { | 84 | { |
| 81 | struct exdata exdata1, exdata2; | 85 | struct exdata exdata1, exdata2, exdata3, exdata4; |
| 82 | void *argp; | 86 | void *argp; |
| 83 | long argl; | 87 | long argl; |
| 84 | int idx1, idx2; | 88 | int idx1, idx2; |
| @@ -86,6 +90,8 @@ ex_data_test(void) | |||
| 86 | 90 | ||
| 87 | memset(&exdata1, 0, sizeof(exdata1)); | 91 | memset(&exdata1, 0, sizeof(exdata1)); |
| 88 | memset(&exdata2, 0, sizeof(exdata2)); | 92 | memset(&exdata2, 0, sizeof(exdata2)); |
| 93 | memset(&exdata3, 0, sizeof(exdata3)); | ||
| 94 | memset(&exdata4, 0, sizeof(exdata4)); | ||
| 89 | 95 | ||
| 90 | argl = 1234; | 96 | argl = 1234; |
| 91 | argp = &argl; | 97 | argp = &argl; |
| @@ -123,33 +129,33 @@ ex_data_test(void) | |||
| 123 | } | 129 | } |
| 124 | 130 | ||
| 125 | if (!CRYPTO_set_ex_data(&exdata1.exdata, idx2, &idx2)) { | 131 | if (!CRYPTO_set_ex_data(&exdata1.exdata, idx2, &idx2)) { |
| 126 | fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed\n"); | 132 | fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index 2\n"); |
| 127 | goto failure; | 133 | goto failure; |
| 128 | } | 134 | } |
| 129 | if (!CRYPTO_set_ex_data(&exdata1.exdata, idx1, &idx1)) { | 135 | if (!CRYPTO_set_ex_data(&exdata1.exdata, idx1, &idx1)) { |
| 130 | fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed\n"); | 136 | fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index 1\n"); |
| 131 | goto failure; | 137 | goto failure; |
| 132 | } | 138 | } |
| 133 | if (CRYPTO_get_ex_data(&exdata1.exdata, idx1) != &idx1) { | 139 | if (CRYPTO_get_ex_data(&exdata1.exdata, idx1) != &idx1) { |
| 134 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); | 140 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index 1\n"); |
| 135 | goto failure; | 141 | goto failure; |
| 136 | } | 142 | } |
| 137 | if (CRYPTO_get_ex_data(&exdata1.exdata, idx2) != &idx2) { | 143 | if (CRYPTO_get_ex_data(&exdata1.exdata, idx2) != &idx2) { |
| 138 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); | 144 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index 2\n"); |
| 139 | goto failure; | 145 | goto failure; |
| 140 | } | 146 | } |
| 141 | 147 | ||
| 142 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2.exdata, | 148 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2.exdata, |
| 143 | &exdata1.exdata)) { | 149 | &exdata1.exdata)) { |
| 144 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); | 150 | fprintf(stderr, "FAIL: CRYPTO_dup_ex_data() failed\n"); |
| 145 | goto failure; | 151 | goto failure; |
| 146 | } | 152 | } |
| 147 | if (CRYPTO_get_ex_data(&exdata2.exdata, idx1) != &idx1) { | 153 | if (CRYPTO_get_ex_data(&exdata2.exdata, idx1) != &idx1) { |
| 148 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); | 154 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed after dup\n"); |
| 149 | goto failure; | 155 | goto failure; |
| 150 | } | 156 | } |
| 151 | if (CRYPTO_get_ex_data(&exdata2.exdata, idx2) != &idx2) { | 157 | if (CRYPTO_get_ex_data(&exdata2.exdata, idx2) != &idx2) { |
| 152 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed\n"); | 158 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed after dup\n"); |
| 153 | goto failure; | 159 | goto failure; |
| 154 | } | 160 | } |
| 155 | 161 | ||
| @@ -172,11 +178,55 @@ ex_data_test(void) | |||
| 172 | goto failure; | 178 | goto failure; |
| 173 | } | 179 | } |
| 174 | 180 | ||
| 181 | /* The current implementation allows for data to be set without new. */ | ||
| 182 | if (!CRYPTO_set_ex_data(&exdata3.exdata, idx1, &idx1)) { | ||
| 183 | fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index " | ||
| 184 | "1 (without new)\n"); | ||
| 185 | goto failure; | ||
| 186 | } | ||
| 187 | if (CRYPTO_get_ex_data(&exdata3.exdata, idx1) != &idx1) { | ||
| 188 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index " | ||
| 189 | "1 (without new)\n"); | ||
| 190 | goto failure; | ||
| 191 | } | ||
| 192 | |||
| 193 | /* And indexes can be used without allocation. */ | ||
| 194 | if (!CRYPTO_set_ex_data(&exdata3.exdata, idx2 + 1, &idx2)) { | ||
| 195 | fprintf(stderr, "FAIL: CRYPTO_set_ex_data() failed with index " | ||
| 196 | "%d (unallocated)\n", idx2 + 1); | ||
| 197 | goto failure; | ||
| 198 | } | ||
| 199 | if (CRYPTO_get_ex_data(&exdata3.exdata, idx2 + 1) != &idx2) { | ||
| 200 | fprintf(stderr, "FAIL: CRYPTO_get_ex_data() failed with index " | ||
| 201 | "%d\n", idx2 + 1); | ||
| 202 | goto failure; | ||
| 203 | } | ||
| 204 | |||
| 205 | /* And new can be called without getting any index first. */ | ||
| 206 | if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_BIO, &exdata4, &exdata4.exdata)) { | ||
| 207 | fprintf(stderr, "FAIL: CRYPTO_new_ex_data() failed with " | ||
| 208 | "uninitialised index\n"); | ||
| 209 | goto failure; | ||
| 210 | } | ||
| 211 | |||
| 212 | /* And dup can be called after new or without new... */ | ||
| 213 | if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, &exdata1, &exdata1.exdata)) { | ||
| 214 | fprintf(stderr, "FAIL: CRYPTO_new_ex_data() failed\n"); | ||
| 215 | goto failure; | ||
| 216 | } | ||
| 217 | if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2.exdata, | ||
| 218 | &exdata1.exdata)) { | ||
| 219 | fprintf(stderr, "FAIL: CRYPTO_dup_ex_data() after new failed\n"); | ||
| 220 | goto failure; | ||
| 221 | } | ||
| 222 | |||
| 175 | failed = 0; | 223 | failed = 0; |
| 176 | 224 | ||
| 177 | failure: | 225 | failure: |
| 178 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata1, &exdata1.exdata); | 226 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata1, &exdata1.exdata); |
| 179 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2, &exdata2.exdata); | 227 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata2, &exdata2.exdata); |
| 228 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, &exdata3, &exdata3.exdata); | ||
| 229 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, &exdata4, &exdata4.exdata); | ||
| 180 | 230 | ||
| 181 | return failed; | 231 | return failed; |
| 182 | } | 232 | } |
