libtasn1-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU libtasn1 branch, master, updated. libtasn1_3_5-21-g1c3ccb3


From: Nikos Mavrogiannopoulos
Subject: [SCM] GNU libtasn1 branch, master, updated. libtasn1_3_5-21-g1c3ccb3
Date: Fri, 16 May 2014 20:10:15 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU libtasn1".

http://git.savannah.gnu.org/cgit/libtasn1.git/commit/?id=1c3ccb3e040bf13e342ee60bc23b21b97b11923f

The branch, master has been updated
       via  1c3ccb3e040bf13e342ee60bc23b21b97b11923f (commit)
       via  8596690b7885520d8d0b864e53cf94cc4051360a (commit)
      from  92541f56adbdb56bbc97b07c2e073bbcd9f11b4a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 1c3ccb3e040bf13e342ee60bc23b21b97b11923f
Author: Nikos Mavrogiannopoulos <address@hidden>
Date:   Fri May 16 22:10:08 2014 +0200

    Do not return illegal values in asn1_get_bit_der().

commit 8596690b7885520d8d0b864e53cf94cc4051360a
Author: Nikos Mavrogiannopoulos <address@hidden>
Date:   Fri May 16 21:54:58 2014 +0200

    return the correct error code in asn1_read_value_type()

-----------------------------------------------------------------------

Summary of changes:
 lib/decoding.c |    7 +++++--
 lib/element.c  |   37 +++++++++++++++++++++----------------
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/lib/decoding.c b/lib/decoding.c
index 7e0ed05..894be79 100644
--- a/lib/decoding.c
+++ b/lib/decoding.c
@@ -249,7 +249,7 @@ asn1_get_octet_der (const unsigned char *der, int der_len,
                    int *ret_len, unsigned char *str, int str_size,
                    int *str_len)
 {
-  int len_len;
+  int len_len = 0;
 
   if (der_len <= 0)
     return ASN1_GENERIC_ERROR;
@@ -371,7 +371,7 @@ asn1_get_bit_der (const unsigned char *der, int der_len,
                  int *ret_len, unsigned char *str, int str_size,
                  int *bit_len)
 {
-  int len_len, len_byte;
+  int len_len = 0, len_byte;
 
   if (der_len <= 0)
     return ASN1_GENERIC_ERROR;
@@ -381,6 +381,9 @@ asn1_get_bit_der (const unsigned char *der, int der_len,
 
   *ret_len = len_byte + len_len + 1;
   *bit_len = len_byte * 8 - der[len_len];
+  
+  if (*bit_len <= 0)
+    return ASN1_DER_ERROR;
 
   if (str_size >= len_byte)
     memcpy (str, der + len_len + 1, len_byte);
diff --git a/lib/element.c b/lib/element.c
index 1fd988a..8062bce 100644
--- a/lib/element.c
+++ b/lib/element.c
@@ -790,7 +790,7 @@ asn1_read_value_type (asn1_node root, const char *name, 
void *ivalue,
                      int *len, unsigned int *etype)
 {
   asn1_node node, p, p2;
-  int len2, len3;
+  int len2, len3, result;
   int value_size = *len;
   unsigned char *value = ivalue;
   unsigned type;
@@ -848,9 +848,10 @@ asn1_read_value_type (asn1_node root, const char *name, 
void *ivalue,
          if ((isdigit (p->value[0])) || (p->value[0] == '-')
              || (p->value[0] == '+'))
            {
-             if (_asn1_convert_integer
-                 (p->value, value, value_size, len) != ASN1_SUCCESS)
-               return ASN1_MEM_ERROR;
+             result = _asn1_convert_integer
+                 (p->value, value, value_size, len);
+              if (result != ASN1_SUCCESS)
+               return result;
            }
          else
            {                   /* is an identifier like v1 */
@@ -861,10 +862,11 @@ asn1_read_value_type (asn1_node root, const char *name, 
void *ivalue,
                    {
                      if (!_asn1_strcmp (p2->name, p->value))
                        {
-                         if (_asn1_convert_integer
+                         result = _asn1_convert_integer
                              (p2->value, value, value_size,
-                              len) != ASN1_SUCCESS)
-                           return ASN1_MEM_ERROR;
+                              len);
+                         if (result != ASN1_SUCCESS)
+                           return result;
                          break;
                        }
                    }
@@ -875,10 +877,11 @@ asn1_read_value_type (asn1_node root, const char *name, 
void *ivalue,
       else
        {
          len2 = -1;
-         if (asn1_get_octet_der
+         result = asn1_get_octet_der
              (node->value, node->value_len, &len2, value, value_size,
-              len) != ASN1_SUCCESS)
-           return ASN1_MEM_ERROR;
+              len);
+          if (result != ASN1_SUCCESS)
+           return result;
        }
       break;
     case ASN1_ETYPE_OBJECT_ID:
@@ -927,17 +930,19 @@ asn1_read_value_type (asn1_node root, const char *name, 
void *ivalue,
     case ASN1_ETYPE_UTF8_STRING:
     case ASN1_ETYPE_VISIBLE_STRING:
       len2 = -1;
-      if (asn1_get_octet_der
+      result = asn1_get_octet_der
          (node->value, node->value_len, &len2, value, value_size,
-          len) != ASN1_SUCCESS)
-       return ASN1_MEM_ERROR;
+          len);
+      if (result != ASN1_SUCCESS)
+       return result;
       break;
     case ASN1_ETYPE_BIT_STRING:
       len2 = -1;
-      if (asn1_get_bit_der
+      result = asn1_get_bit_der
          (node->value, node->value_len, &len2, value, value_size,
-          len) != ASN1_SUCCESS)
-       return ASN1_MEM_ERROR;
+          len);
+      if (result != ASN1_SUCCESS)
+       return result;
       break;
     case ASN1_ETYPE_CHOICE:
       PUT_STR_VALUE (value, value_size, node->down->name);


hooks/post-receive
-- 
GNU libtasn1



reply via email to

[Prev in Thread] Current Thread [Next in Thread]