Date: Monday, September 14, 2015 @ 18:56:15 Author: andyrtr Revision: 246037
upgpkg: libtasn1 4.6-2 fix a regression that introduced errors in gnutls Added: libtasn1/trunk/multi-byte-fix.diff Modified: libtasn1/trunk/PKGBUILD ---------------------+ PKGBUILD | 14 ++++- multi-byte-fix.diff | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2015-09-14 16:34:31 UTC (rev 246036) +++ PKGBUILD 2015-09-14 16:56:15 UTC (rev 246037) @@ -5,7 +5,7 @@ pkgname=libtasn1 pkgver=4.6 -pkgrel=1 +pkgrel=2 pkgdesc="The ASN.1 library used in GNUTLS" arch=('i686' 'x86_64') license=('GPL3' 'LGPL') @@ -12,11 +12,19 @@ url="http://www.gnu.org/software/libtasn1/" depends=('glibc' 'texinfo') install=libtasn1.install -source=(http://ftp.gnu.org/gnu/libtasn1/${pkgname}-${pkgver}.tar.gz{,.sig}) +source=(http://ftp.gnu.org/gnu/libtasn1/${pkgname}-${pkgver}.tar.gz{,.sig} + multi-byte-fix.diff) md5sums=('454a7f80362f38bd2335b6e9d95f57a6' - 'SKIP') + 'SKIP' + 'd785762c19c4b2685d9034ed8ca1b3bc') validpgpkeys=('1F42418905D8206AA754CCDC29EE58B996865171') #Nikos Mavrogiannopoulos <n...@gnutls.org> +prepare() { + cd ${pkgname}-${pkgver} + # http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=commit;h=e4478fb4a0186f9d59969bf93ed8fa6074729b43 + patch -Np1 -i ${srcdir}/multi-byte-fix.diff +} + build() { cd ${pkgname}-${pkgver} ./configure --prefix=/usr \ Added: multi-byte-fix.diff =================================================================== --- multi-byte-fix.diff (rev 0) +++ multi-byte-fix.diff 2015-09-14 16:56:15 UTC (rev 246037) @@ -0,0 +1,132 @@ +X-Git-Url: +http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blobdiff_plain;f=lib%2Fdecoding.c;h=caf1eb47aa55941260a1e03d8b1c079afb546b51;hp=4d2302f5e57ba67d8c753eec8e88038a0197dca5;hb=a6a05643f0a1a9a5ea431bab65998a7c68b25c03;hpb=4e7a89e701d43f73b2b1398ad1eda470f7ddb9ee + +diff --git a/lib/decoding.c b/lib/decoding.c +index 4d2302f..caf1eb4 100644 +--- a/lib/decoding.c ++++ b/lib/decoding.c +@@ -480,10 +480,12 @@ asn1_get_bit_der (const unsigned char *der, int der_len, + return ASN1_SUCCESS; + } + +- ++/* tag_len: the total tag length (explicit+inner) ++ * inner_tag_len: the inner_tag length ++ */ + static int + _asn1_extract_tag_der (asn1_node node, const unsigned char *der, int der_len, +- int *ret_len, unsigned flags) ++ int *tag_len, int *inner_tag_len, unsigned flags) + { + asn1_node p; + int counter, len2, len3, is_tag_implicit; +@@ -594,7 +596,9 @@ _asn1_extract_tag_der (asn1_node node, const unsigned char *der, int der_len, + unsigned type = type_field (node->type); + if (type == ASN1_ETYPE_TAG) + { +- *ret_len = 0; ++ *tag_len = 0; ++ if (inner_tag_len) ++ *inner_tag_len = 0; + return ASN1_SUCCESS; + } + +@@ -654,7 +658,9 @@ _asn1_extract_tag_der (asn1_node node, const unsigned char *der, int der_len, + } + + counter += len2; +- *ret_len = counter; ++ *tag_len = counter; ++ if (inner_tag_len) ++ *inner_tag_len = len2; + return ASN1_SUCCESS; + + cleanup: +@@ -663,7 +669,7 @@ cleanup: + + static int + extract_tag_der_recursive(asn1_node node, const unsigned char *der, int der_len, +- int *ret_len, unsigned flags) ++ int *ret_len, int *inner_len, unsigned flags) + { + asn1_node p; + int ris = ASN1_DER_ERROR; +@@ -673,7 +679,7 @@ int ris = ASN1_DER_ERROR; + p = node->down; + while (p) + { +- ris = _asn1_extract_tag_der (p, der, der_len, ret_len, flags); ++ ris = _asn1_extract_tag_der (p, der, der_len, ret_len, inner_len, flags); + if (ris == ASN1_SUCCESS) + break; + p = p->right; +@@ -683,7 +689,7 @@ int ris = ASN1_DER_ERROR; + return ris; + } + else +- return _asn1_extract_tag_der (node, der, der_len, ret_len, flags); ++ return _asn1_extract_tag_der (node, der, der_len, ret_len, inner_len, flags); + } + + static int +@@ -1014,6 +1020,7 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, + unsigned long tag; + int tag_len; + int indefinite, result, total_len = *max_ider_len, ider_len = *max_ider_len; ++ int inner_tag_len; + const unsigned char *der = ider; + + node = *element; +@@ -1037,6 +1044,7 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, + while (1) + { + tag_len = 0; ++ inner_tag_len = 0; + ris = ASN1_SUCCESS; + if (move != UP) + { +@@ -1074,7 +1082,7 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, + { + ris = + extract_tag_der_recursive (p2, der + counter, +- ider_len, &len2, flags); ++ ider_len, &len2, NULL, flags); + if (ris == ASN1_SUCCESS) + { + p2->type &= ~CONST_NOT_USED; +@@ -1124,7 +1132,7 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, + { + ris = + extract_tag_der_recursive (p->down, der + counter, +- ider_len, &len2, flags); ++ ider_len, &len2, NULL, flags); + + if (ris == ASN1_SUCCESS) + { +@@ -1171,7 +1179,7 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, + if (ris == ASN1_SUCCESS) + ris = + extract_tag_der_recursive (p, der + counter, ider_len, +- &tag_len, flags); ++ &tag_len, &inner_tag_len, flags); + + if (ris != ASN1_SUCCESS) + { +@@ -1289,14 +1297,15 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, + move = RIGHT; + break; + case ASN1_ETYPE_OCTET_STRING: +- if (counter < tag_len) ++ if (counter < inner_tag_len) + { + result = ASN1_DER_ERROR; + warn(); + goto cleanup; + } ++ + result = get_octet_string (p, der + counter, ider_len, +- der + counter - tag_len, tag_len, ++ der + counter - inner_tag_len, inner_tag_len, + &len3, flags); + if (result != ASN1_SUCCESS) + {