summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authormiod <>2014-07-11 14:22:55 +0000
committermiod <>2014-07-11 14:22:55 +0000
commitb76881306f907ca5f941dc6b06671d3450dd76d1 (patch)
treef6b838771d9fdcce04eef4891e29f8d314e4139a /src/lib
parent439032eec8b1ed80ee0d0110896b7f9455427bb3 (diff)
downloadopenbsd-b76881306f907ca5f941dc6b06671d3450dd76d1.tar.gz
openbsd-b76881306f907ca5f941dc6b06671d3450dd76d1.tar.bz2
openbsd-b76881306f907ca5f941dc6b06671d3450dd76d1.zip
In asn1_get_length(), tolerate leading zeroes in BER encoding.
OpenSSL PR #2746 via OpenSSL trunk
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/asn1/asn1_lib.c13
-rw-r--r--src/lib/libssl/src/crypto/asn1/asn1_lib.c13
2 files changed, 16 insertions, 10 deletions
diff --git a/src/lib/libcrypto/asn1/asn1_lib.c b/src/lib/libcrypto/asn1/asn1_lib.c
index b5f3f78b94..d851339753 100644
--- a/src/lib/libcrypto/asn1/asn1_lib.c
+++ b/src/lib/libcrypto/asn1/asn1_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: asn1_lib.c,v 1.30 2014/07/11 08:44:47 jsing Exp $ */ 1/* $OpenBSD: asn1_lib.c,v 1.31 2014/07/11 14:22:55 miod 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 *
@@ -174,15 +174,18 @@ asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max)
174 *inf = 0; 174 *inf = 0;
175 i= *p & 0x7f; 175 i= *p & 0x7f;
176 if (*(p++) & 0x80) { 176 if (*(p++) & 0x80) {
177 if (max < (int)i)
178 return (0);
179 /* skip leading zeroes */
180 while (i && *p == 0) {
181 p++;
182 i--;
183 }
177 if (i > sizeof(long)) 184 if (i > sizeof(long))
178 return 0; 185 return 0;
179 if (max-- == 0)
180 return (0);
181 while (i-- > 0) { 186 while (i-- > 0) {
182 ret <<= 8L; 187 ret <<= 8L;
183 ret |= *(p++); 188 ret |= *(p++);
184 if (max-- == 0)
185 return (0);
186 } 189 }
187 } else 190 } else
188 ret = i; 191 ret = i;
diff --git a/src/lib/libssl/src/crypto/asn1/asn1_lib.c b/src/lib/libssl/src/crypto/asn1/asn1_lib.c
index b5f3f78b94..d851339753 100644
--- a/src/lib/libssl/src/crypto/asn1/asn1_lib.c
+++ b/src/lib/libssl/src/crypto/asn1/asn1_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: asn1_lib.c,v 1.30 2014/07/11 08:44:47 jsing Exp $ */ 1/* $OpenBSD: asn1_lib.c,v 1.31 2014/07/11 14:22:55 miod 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 *
@@ -174,15 +174,18 @@ asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max)
174 *inf = 0; 174 *inf = 0;
175 i= *p & 0x7f; 175 i= *p & 0x7f;
176 if (*(p++) & 0x80) { 176 if (*(p++) & 0x80) {
177 if (max < (int)i)
178 return (0);
179 /* skip leading zeroes */
180 while (i && *p == 0) {
181 p++;
182 i--;
183 }
177 if (i > sizeof(long)) 184 if (i > sizeof(long))
178 return 0; 185 return 0;
179 if (max-- == 0)
180 return (0);
181 while (i-- > 0) { 186 while (i-- > 0) {
182 ret <<= 8L; 187 ret <<= 8L;
183 ret |= *(p++); 188 ret |= *(p++);
184 if (max-- == 0)
185 return (0);
186 } 189 }
187 } else 190 } else
188 ret = i; 191 ret = i;