summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libssl/bs_cbs.c3
-rw-r--r--src/lib/libssl/src/ssl/bs_cbs.c3
-rw-r--r--src/regress/lib/libssl/bytestring/bytestringtest.c38
3 files changed, 41 insertions, 3 deletions
diff --git a/src/lib/libssl/bs_cbs.c b/src/lib/libssl/bs_cbs.c
index ea31cfc530..d45353a890 100644
--- a/src/lib/libssl/bs_cbs.c
+++ b/src/lib/libssl/bs_cbs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bs_cbs.c,v 1.15 2015/06/20 01:21:51 doug Exp $ */ 1/* $OpenBSD: bs_cbs.c,v 1.16 2015/06/23 05:58:28 doug Exp $ */
2/* 2/*
3 * Copyright (c) 2014, Google Inc. 3 * Copyright (c) 2014, Google Inc.
4 * 4 *
@@ -36,6 +36,7 @@ void
36CBS_dup(const CBS *cbs, CBS *out) 36CBS_dup(const CBS *cbs, CBS *out)
37{ 37{
38 CBS_init(out, CBS_data(cbs), CBS_len(cbs)); 38 CBS_init(out, CBS_data(cbs), CBS_len(cbs));
39 out->initial_len = cbs->initial_len;
39} 40}
40 41
41static int 42static int
diff --git a/src/lib/libssl/src/ssl/bs_cbs.c b/src/lib/libssl/src/ssl/bs_cbs.c
index ea31cfc530..d45353a890 100644
--- a/src/lib/libssl/src/ssl/bs_cbs.c
+++ b/src/lib/libssl/src/ssl/bs_cbs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bs_cbs.c,v 1.15 2015/06/20 01:21:51 doug Exp $ */ 1/* $OpenBSD: bs_cbs.c,v 1.16 2015/06/23 05:58:28 doug Exp $ */
2/* 2/*
3 * Copyright (c) 2014, Google Inc. 3 * Copyright (c) 2014, Google Inc.
4 * 4 *
@@ -36,6 +36,7 @@ void
36CBS_dup(const CBS *cbs, CBS *out) 36CBS_dup(const CBS *cbs, CBS *out)
37{ 37{
38 CBS_init(out, CBS_data(cbs), CBS_len(cbs)); 38 CBS_init(out, CBS_data(cbs), CBS_len(cbs));
39 out->initial_len = cbs->initial_len;
39} 40}
40 41
41static int 42static int
diff --git a/src/regress/lib/libssl/bytestring/bytestringtest.c b/src/regress/lib/libssl/bytestring/bytestringtest.c
index d989868c85..3275e6f2c7 100644
--- a/src/regress/lib/libssl/bytestring/bytestringtest.c
+++ b/src/regress/lib/libssl/bytestring/bytestringtest.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bytestringtest.c,v 1.7 2015/06/23 01:20:24 doug Exp $ */ 1/* $OpenBSD: bytestringtest.c,v 1.8 2015/06/23 05:58:28 doug Exp $ */
2/* 2/*
3 * Copyright (c) 2014, Google Inc. 3 * Copyright (c) 2014, Google Inc.
4 * 4 *
@@ -751,6 +751,41 @@ err:
751 return ret; 751 return ret;
752} 752}
753 753
754static int
755test_cbs_dup(void)
756{
757 CBS data, check;
758 static const uint8_t input[] = {'f', 'o', 'o', 'b', 'a', 'r'};
759
760 CBS_init(&data, input, sizeof(input));
761 CHECK(CBS_len(&data) == 6);
762 CBS_dup(&data, &check);
763 CHECK(CBS_len(&check) == 6);
764 CHECK(CBS_data(&data) == CBS_data(&check));
765 CHECK(CBS_skip(&data, 1));
766 CHECK(CBS_len(&data) == 5);
767 CHECK(CBS_len(&check) == 6);
768 CHECK(CBS_data(&data) == CBS_data(&check) + 1);
769 CHECK(CBS_skip(&check, 1));
770 CHECK(CBS_len(&data) == 5);
771 CHECK(CBS_len(&check) == 5);
772 CHECK(CBS_data(&data) == CBS_data(&check));
773 CHECK(CBS_offset(&data) == 1);
774 CHECK(CBS_offset(&check) == 1);
775
776 CBS_init(&data, input, sizeof(input));
777 CHECK(CBS_skip(&data, 5));
778 CBS_dup(&data, &check);
779 CHECK(CBS_len(&data) == 1);
780 CHECK(CBS_len(&check) == 1);
781 CHECK(CBS_data(&data) == input + 5);
782 CHECK(CBS_data(&data) == CBS_data(&check));
783 CHECK(CBS_offset(&data) == 5);
784 CHECK(CBS_offset(&check) == 5);
785
786 return 1;
787}
788
754int 789int
755main(void) 790main(void)
756{ 791{
@@ -772,6 +807,7 @@ main(void)
772 failed |= !test_get_optional_asn1_bool(); 807 failed |= !test_get_optional_asn1_bool();
773 failed |= !test_offset(); 808 failed |= !test_offset();
774 failed |= !test_write_bytes(); 809 failed |= !test_write_bytes();
810 failed |= !test_cbs_dup();
775 811
776 if (!failed) 812 if (!failed)
777 printf("PASS\n"); 813 printf("PASS\n");