diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2014-05-17 09:11:10 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2014-05-17 09:16:07 +0200 |
commit | e47b2a0651ffe1867c844968ade7f6127957bf13 (patch) | |
tree | 9db3c89f8cefaac87be72943c15f52d16f908be6 | |
parent | e3a8295c5784d36e1a2b1fb0823fda164366e067 (diff) | |
download | libtasn1-e47b2a0651ffe1867c844968ade7f6127957bf13.tar.gz libtasn1-e47b2a0651ffe1867c844968ade7f6127957bf13.tar.bz2 libtasn1-e47b2a0651ffe1867c844968ade7f6127957bf13.zip |
Reverted ltostr() changes as the cause a significant delay to the library.
The best approach would be to eliminate the need for ltostr() completely.
Added LTOSTR_MAX_SIZE, to avoid overflows.
-rw-r--r-- | lib/coding.c | 4 | ||||
-rw-r--r-- | lib/decoding.c | 6 | ||||
-rw-r--r-- | lib/element.c | 2 | ||||
-rw-r--r-- | lib/parser_aux.c | 2 | ||||
-rw-r--r-- | lib/parser_aux.h | 1 |
5 files changed, 8 insertions, 7 deletions
diff --git a/lib/coding.c b/lib/coding.c index e4eb060..d6b7cf4 100644 --- a/lib/coding.c +++ b/lib/coding.c @@ -594,7 +594,7 @@ _asn1_insert_tag_der (asn1_node node, unsigned char *der, int *counter, { asn1_node p; int tag_len, is_tag_implicit; - unsigned char class, class_implicit = 0, temp[SIZEOF_UNSIGNED_INT * 3 + 1]; + unsigned char class, class_implicit = 0, temp[MAX(SIZEOF_UNSIGNED_INT * 3 + 1, LTOSTR_MAX_SIZE)]; unsigned long tag_implicit = 0; unsigned char tag_der[MAX_TAG_LEN]; @@ -1012,7 +1012,7 @@ asn1_der_coding (asn1_node element, const char *name, void *ider, int *len, char *ErrorDescription) { asn1_node node, p, p2; - unsigned char temp[SIZEOF_UNSIGNED_LONG_INT * 3 + 1]; + unsigned char temp[MAX(LTOSTR_MAX_SIZE, SIZEOF_UNSIGNED_LONG_INT * 3 + 1)]; int counter, counter_old, len2, len3, tlen, move, max_len, max_len_old; int err; unsigned char *der = ider; diff --git a/lib/decoding.c b/lib/decoding.c index f85451f..93bc962 100644 --- a/lib/decoding.c +++ b/lib/decoding.c @@ -302,7 +302,7 @@ _asn1_get_objectid_der (const unsigned char *der, int der_len, int *ret_len, { int len_len, len, k; int leading; - char temp[20]; + char temp[LTOSTR_MAX_SIZE]; unsigned long val, val1; *ret_len = 0; @@ -1952,7 +1952,7 @@ asn1_der_decoding_element (asn1_node * structure, const char *elementName, counter += len2; if (len3 > 0) { - _asn1_ltostr (counter + len3, temp, sizeof(temp)); + _asn1_ltostr (counter + len3, temp); tlen = strlen (temp); if (tlen > 0) @@ -2035,7 +2035,7 @@ asn1_der_decoding_element (asn1_node * structure, const char *elementName, counter += len2; if (len3) { - _asn1_ltostr (counter + len3, temp, sizeof(temp)); + _asn1_ltostr (counter + len3, temp); tlen = strlen (temp); if (tlen > 0) diff --git a/lib/element.c b/lib/element.c index 3f31aa2..359b3ab 100644 --- a/lib/element.c +++ b/lib/element.c @@ -130,7 +130,7 @@ int _asn1_append_sequence_set (asn1_node node) { asn1_node p, p2; - char temp[10]; + char temp[LTOSTR_MAX_SIZE]; long n; if (!node || !(node->down)) diff --git a/lib/parser_aux.c b/lib/parser_aux.c index 31d1770..effedb2 100644 --- a/lib/parser_aux.c +++ b/lib/parser_aux.c @@ -536,7 +536,7 @@ char * _asn1_ltostr (long v, char *str) { long d, r; - char temp[20]; + char temp[LTOSTR_MAX_SIZE]; int count, k, start; if (v < 0) diff --git a/lib/parser_aux.h b/lib/parser_aux.h index f1e9a07..1f1aec2 100644 --- a/lib/parser_aux.h +++ b/lib/parser_aux.h @@ -52,6 +52,7 @@ void _asn1_delete_list (void); void _asn1_delete_list_and_nodes (void); +#define LTOSTR_MAX_SIZE 20 char *_asn1_ltostr (long v, char *str); asn1_node _asn1_find_up (asn1_node node); |