summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortb <>2024-02-26 15:00:30 +0000
committertb <>2024-02-26 15:00:30 +0000
commit11ef2217cacdb92184e7ebd704666c7ad611fceb (patch)
tree2dbd38cc6bf3a73f80f1f2eeb712662582dce17e /src/lib
parentcdcdc3f000a66ef2634f3b9ffef752eaab42c119 (diff)
downloadopenbsd-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.c34
-rw-r--r--src/lib/libcrypto/stack/stack.c37
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 *
440OBJ_bsearch_(const void *key, const void *base, int num, int size, 440OBJ_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}
445LCRYPTO_ALIAS(OBJ_bsearch_); 446LCRYPTO_ALIAS(OBJ_bsearch_);
446 447
@@ -448,33 +449,8 @@ const void *
448OBJ_bsearch_ex_(const void *key, const void *base_, int num, int size, 449OBJ_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}
196LCRYPTO_ALIAS(sk_delete); 196LCRYPTO_ALIAS(sk_delete);
197 197
198static const void *
199obj_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
198static int 231static int
199internal_find(_STACK *st, void *data, int ret_val_options) 232internal_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);