summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorschwarze <>2018-04-01 00:36:28 +0000
committerschwarze <>2018-04-01 00:36:28 +0000
commit19ca27005331c7a91aa7c035f28984463af71c84 (patch)
treed68bda8b9354fb1fa31660be4c25fedb4487eef3 /src
parent305fd53b371c0bfd8018f8401c64f25853e8b475 (diff)
downloadopenbsd-19ca27005331c7a91aa7c035f28984463af71c84.tar.gz
openbsd-19ca27005331c7a91aa7c035f28984463af71c84.tar.bz2
openbsd-19ca27005331c7a91aa7c035f28984463af71c84.zip
When you replace an element in a sorted array with something
arbitrarily different, the array is in general no longer sorted. This commit copies a small hidden bugfix from the OpenSSL commit https://github.com/openssl/openssl/commit/fbb7b33b the rest of which is merely cosmetics. I discovered the bug independently while documenting sk_find(3). Keep the library's idea of when an empty stack or a one-element stack is sorted and when it is not bug-compatible with OpenSSL, even though in fact, empty and one-element stacks are of course always sorted. OK beck@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/man/OPENSSL_sk_new.316
-rw-r--r--src/lib/libcrypto/stack/stack.c3
2 files changed, 6 insertions, 13 deletions
diff --git a/src/lib/libcrypto/man/OPENSSL_sk_new.3 b/src/lib/libcrypto/man/OPENSSL_sk_new.3
index 748411bf15..47b19cb4e8 100644
--- a/src/lib/libcrypto/man/OPENSSL_sk_new.3
+++ b/src/lib/libcrypto/man/OPENSSL_sk_new.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: OPENSSL_sk_new.3,v 1.8 2018/03/27 17:35:50 schwarze Exp $ 1.\" $OpenBSD: OPENSSL_sk_new.3,v 1.9 2018/04/01 00:36:28 schwarze Exp $
2.\" 2.\"
3.\" Copyright (c) 2018 Ingo Schwarze <schwarze@openbsd.org> 3.\" Copyright (c) 2018 Ingo Schwarze <schwarze@openbsd.org>
4.\" 4.\"
@@ -14,7 +14,7 @@
14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16.\" 16.\"
17.Dd $Mdocdate: March 27 2018 $ 17.Dd $Mdocdate: April 1 2018 $
18.Dt OPENSSL_SK_NEW 3 18.Dt OPENSSL_SK_NEW 3
19.Os 19.Os
20.Sh NAME 20.Sh NAME
@@ -279,8 +279,9 @@ or
279successfuly calling 279successfuly calling
280.Fn sk_push , 280.Fn sk_push ,
281.Fn sk_unshift , 281.Fn sk_unshift ,
282or
283.Fn sk_insert , 282.Fn sk_insert ,
283or
284.Fn sk_set ,
284or changing the comparison function sets the state to unsorted. 285or changing the comparison function sets the state to unsorted.
285If a comparison function is installed, calling 286If a comparison function is installed, calling
286.Fn sk_sort , 287.Fn sk_sort ,
@@ -564,15 +565,6 @@ first appeared in OpenSSL 0.9.7e and has been available since
564first appeared in OpenSSL 0.9.8 and has been available since 565first appeared in OpenSSL 0.9.8 and has been available since
565.Ox 4.5 . 566.Ox 4.5 .
566.Sh BUGS 567.Sh BUGS
567.Fn sk_set
568does not set the state of the
569.Fa stack
570to unsorted.
571This can cause wrong results from subsequent
572.Fn sk_find
573and
574.Fn sk_find_ex .
575.Pp
576Even if a comparison function is installed, empty stacks and 568Even if a comparison function is installed, empty stacks and
577stacks containing a single pointer are sometimes considered 569stacks containing a single pointer are sometimes considered
578sorted and sometimes considered unsorted. 570sorted and sometimes considered unsorted.
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c
index d941f9e6fb..b76a0d7271 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.19 2015/02/07 13:19:15 doug Exp $ */ 1/* $OpenBSD: stack.c,v 1.20 2018/04/01 00:36:28 schwarze 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 *
@@ -312,6 +312,7 @@ sk_set(_STACK *st, int i, void *value)
312{ 312{
313 if (!st || (i < 0) || (i >= st->num)) 313 if (!st || (i < 0) || (i >= st->num))
314 return NULL; 314 return NULL;
315 st->sorted = 0;
315 return (st->data[i] = value); 316 return (st->data[i] = value);
316} 317}
317 318