-
-
Notifications
You must be signed in to change notification settings - Fork 9.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix BIO_get_new_index() to return an error when it is exhausted.
Fixes #23655 BIO_get_new_index() returns a range of 129..255. It is set to BIO_TYPE_START (128) initially and is incremented on each call. >= 256 is reserved for the class type flags (BIO_TYPE_DESCRIPTOR) so it should error if it reaches the upper bound. Reviewed-by: Hugo Landau <hlandau@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from #23732)
- Loading branch information
1 parent
53a8728
commit d60b375
Showing
9 changed files
with
116 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* | ||
* Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. | ||
* | ||
* Licensed under the Apache License 2.0 (the "License"). You may not use | ||
* this file except in compliance with the License. You can obtain a copy | ||
* in the file LICENSE in the source distribution or at | ||
* https://www.openssl.org/source/license.html | ||
*/ | ||
|
||
#include <openssl/bio.h> | ||
#include "testutil.h" | ||
|
||
static int test_bio_meth(void) | ||
{ | ||
int i, ret = 0, id; | ||
BIO_METHOD *meth1 = NULL, *meth2 = NULL, *meth3 = NULL; | ||
BIO *membio = NULL, *bio1 = NULL, *bio2 = NULL, *bio3 = NULL; | ||
|
||
id = BIO_get_new_index(); | ||
if (!TEST_int_eq(id, BIO_TYPE_START + 1)) | ||
goto err; | ||
|
||
if (!TEST_ptr(meth1 = BIO_meth_new(id, "Method1")) | ||
|| !TEST_ptr(meth2 = BIO_meth_new(BIO_TYPE_NONE, "Method2")) | ||
|| !TEST_ptr(meth3 = BIO_meth_new(BIO_TYPE_NONE|BIO_TYPE_FILTER, "Method3")) | ||
|| !TEST_ptr(bio1 = BIO_new(meth1)) | ||
|| !TEST_ptr(bio2 = BIO_new(meth2)) | ||
|| !TEST_ptr(bio3 = BIO_new(meth3)) | ||
|| !TEST_ptr(membio = BIO_new(BIO_s_mem()))) | ||
goto err; | ||
|
||
BIO_set_next(bio3, bio2); | ||
BIO_set_next(bio2, bio1); | ||
BIO_set_next(bio1, membio); | ||
|
||
/* Check that we get an error if we exhaust BIO_get_new_index() */ | ||
for (i = id + 1; i <= BIO_TYPE_MASK; ++i) { | ||
if (!TEST_int_eq(BIO_get_new_index(), i)) | ||
goto err; | ||
} | ||
if (!TEST_int_eq(BIO_get_new_index(), -1)) | ||
goto err; | ||
|
||
/* test searching works */ | ||
if (!TEST_ptr_eq(BIO_find_type(bio3, BIO_TYPE_MEM), membio) | ||
|| !TEST_ptr_eq(BIO_find_type(bio3, id), bio1)) | ||
goto err; | ||
|
||
/* Check searching for BIO_TYPE_NONE returns NULL */ | ||
if (!TEST_ptr_null(BIO_find_type(bio3, BIO_TYPE_NONE))) | ||
goto err; | ||
/* Check searching for BIO_TYPE_NONE + BIO_TYPE_FILTER works */ | ||
if (!TEST_ptr_eq(BIO_find_type(bio3, BIO_TYPE_FILTER), bio3)) | ||
goto err; | ||
ret = 1; | ||
err: | ||
BIO_free(membio); | ||
BIO_free(bio3); | ||
BIO_free(bio2); | ||
BIO_free(bio1); | ||
BIO_meth_free(meth3); | ||
BIO_meth_free(meth2); | ||
BIO_meth_free(meth1); | ||
return ret; | ||
} | ||
|
||
int setup_tests(void) | ||
{ | ||
ADD_TEST(test_bio_meth); | ||
return 1; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#! /usr/bin/env perl | ||
# Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. | ||
# | ||
# Licensed under the Apache License 2.0 (the "License"). You may not use | ||
# this file except in compliance with the License. You can obtain a copy | ||
# in the file LICENSE in the source distribution or at | ||
# https://www.openssl.org/source/license.html | ||
|
||
use OpenSSL::Test::Simple; | ||
|
||
simple_test("test_bio_meth", "bio_meth_test"); | ||
|