diff options
author | tb <> | 2024-02-26 15:00:30 +0000 |
---|---|---|
committer | tb <> | 2024-02-26 15:00:30 +0000 |
commit | 11ef2217cacdb92184e7ebd704666c7ad611fceb (patch) | |
tree | 2dbd38cc6bf3a73f80f1f2eeb712662582dce17e /src/lib | |
parent | cdcdc3f000a66ef2634f3b9ffef752eaab42c119 (diff) | |
download | openbsd-11ef2217cacdb92184e7ebd704666c7ad611fceb.tar.gz openbsd-11ef2217cacdb92184e7ebd704666c7ad611fceb.tar.bz2 openbsd-11ef2217cacdb92184e7ebd704666c7ad611fceb.zip |
Neuter OBJ_bsearch{_,ex_}()
Make these functions always fail. A copy of OBJ_bsearch_ex_() is kept
in stack.c, where it is still used by internal_find() for sk_find{,_ex}().
sk_find_ex() will be removed in the upcoming bump, and then we can
simplify or rewrite what's still needed.
ok jsing
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/objects/obj_dat.c | 34 | ||||
-rw-r--r-- | src/lib/libcrypto/stack/stack.c | 37 |
2 files changed, 40 insertions, 31 deletions
diff --git a/src/lib/libcrypto/objects/obj_dat.c b/src/lib/libcrypto/objects/obj_dat.c index 170a6d58a3..1719cc73e2 100644 --- a/src/lib/libcrypto/objects/obj_dat.c +++ b/src/lib/libcrypto/objects/obj_dat.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: obj_dat.c,v 1.85 2024/01/24 14:05:10 jsing Exp $ */ | 1 | /* $OpenBSD: obj_dat.c,v 1.86 2024/02/26 15:00:30 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -440,7 +440,8 @@ const void * | |||
440 | OBJ_bsearch_(const void *key, const void *base, int num, int size, | 440 | OBJ_bsearch_(const void *key, const void *base, int num, int size, |
441 | int (*cmp)(const void *, const void *)) | 441 | int (*cmp)(const void *, const void *)) |
442 | { | 442 | { |
443 | return OBJ_bsearch_ex_(key, base, num, size, cmp, 0); | 443 | OBJerror(ERR_R_DISABLED); |
444 | return NULL; | ||
444 | } | 445 | } |
445 | LCRYPTO_ALIAS(OBJ_bsearch_); | 446 | LCRYPTO_ALIAS(OBJ_bsearch_); |
446 | 447 | ||
@@ -448,33 +449,8 @@ const void * | |||
448 | OBJ_bsearch_ex_(const void *key, const void *base_, int num, int size, | 449 | OBJ_bsearch_ex_(const void *key, const void *base_, int num, int size, |
449 | int (*cmp)(const void *, const void *), int flags) | 450 | int (*cmp)(const void *, const void *), int flags) |
450 | { | 451 | { |
451 | const char *base = base_; | 452 | OBJerror(ERR_R_DISABLED); |
452 | int l, h, i = 0, c = 0; | 453 | return NULL; |
453 | const char *p = NULL; | ||
454 | |||
455 | if (num == 0) | ||
456 | return (NULL); | ||
457 | l = 0; | ||
458 | h = num; | ||
459 | while (l < h) { | ||
460 | i = (l + h) / 2; | ||
461 | p = &(base[i * size]); | ||
462 | c = (*cmp)(key, p); | ||
463 | if (c < 0) | ||
464 | h = i; | ||
465 | else if (c > 0) | ||
466 | l = i + 1; | ||
467 | else | ||
468 | break; | ||
469 | } | ||
470 | if (c != 0 && !(flags & OBJ_BSEARCH_VALUE_ON_NOMATCH)) | ||
471 | p = NULL; | ||
472 | else if (c == 0 && (flags & OBJ_BSEARCH_FIRST_VALUE_ON_MATCH)) { | ||
473 | while (i > 0 && (*cmp)(key, &(base[(i - 1) * size])) == 0) | ||
474 | i--; | ||
475 | p = &(base[i * size]); | ||
476 | } | ||
477 | return (p); | ||
478 | } | 454 | } |
479 | 455 | ||
480 | /* Convert an object name into an ASN1_OBJECT | 456 | /* Convert an object name into an ASN1_OBJECT |
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c index f5c568dc5e..818e738447 100644 --- a/src/lib/libcrypto/stack/stack.c +++ b/src/lib/libcrypto/stack/stack.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: stack.c,v 1.24 2024/01/13 16:32:53 tb Exp $ */ | 1 | /* $OpenBSD: stack.c,v 1.25 2024/02/26 15:00:30 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -195,6 +195,39 @@ sk_delete(_STACK *st, int loc) | |||
195 | } | 195 | } |
196 | LCRYPTO_ALIAS(sk_delete); | 196 | LCRYPTO_ALIAS(sk_delete); |
197 | 197 | ||
198 | static const void * | ||
199 | obj_bsearch_ex(const void *key, const void *base_, int num, int size, | ||
200 | int (*cmp)(const void *, const void *), int flags) | ||
201 | { | ||
202 | const char *base = base_; | ||
203 | int l, h, i = 0, c = 0; | ||
204 | const char *p = NULL; | ||
205 | |||
206 | if (num == 0) | ||
207 | return (NULL); | ||
208 | l = 0; | ||
209 | h = num; | ||
210 | while (l < h) { | ||
211 | i = (l + h) / 2; | ||
212 | p = &(base[i * size]); | ||
213 | c = (*cmp)(key, p); | ||
214 | if (c < 0) | ||
215 | h = i; | ||
216 | else if (c > 0) | ||
217 | l = i + 1; | ||
218 | else | ||
219 | break; | ||
220 | } | ||
221 | if (c != 0 && !(flags & OBJ_BSEARCH_VALUE_ON_NOMATCH)) | ||
222 | p = NULL; | ||
223 | else if (c == 0 && (flags & OBJ_BSEARCH_FIRST_VALUE_ON_MATCH)) { | ||
224 | while (i > 0 && (*cmp)(key, &(base[(i - 1) * size])) == 0) | ||
225 | i--; | ||
226 | p = &(base[i * size]); | ||
227 | } | ||
228 | return (p); | ||
229 | } | ||
230 | |||
198 | static int | 231 | static int |
199 | internal_find(_STACK *st, void *data, int ret_val_options) | 232 | internal_find(_STACK *st, void *data, int ret_val_options) |
200 | { | 233 | { |
@@ -213,7 +246,7 @@ internal_find(_STACK *st, void *data, int ret_val_options) | |||
213 | sk_sort(st); | 246 | sk_sort(st); |
214 | if (data == NULL) | 247 | if (data == NULL) |
215 | return (-1); | 248 | return (-1); |
216 | r = OBJ_bsearch_ex_(&data, st->data, st->num, sizeof(void *), st->comp, | 249 | r = obj_bsearch_ex(&data, st->data, st->num, sizeof(void *), st->comp, |
217 | ret_val_options); | 250 | ret_val_options); |
218 | if (r == NULL) | 251 | if (r == NULL) |
219 | return (-1); | 252 | return (-1); |