gnutls-commit
[Top][All Lists]
Advanced

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

[SCM] GNU gnutls branch, gnutls_2_12_x, updated. gnutls_2_12_18-1-gd6b98


From: Nikos Mavrogiannopoulos
Subject: [SCM] GNU gnutls branch, gnutls_2_12_x, updated. gnutls_2_12_18-1-gd6b983d
Date: Sun, 01 Apr 2012 19:48:42 +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 gnutls".

http://git.savannah.gnu.org/cgit/gnutls.git/commit/?id=d6b983dee475d1597687c3dcbca54c5842e3fc7f

The branch, gnutls_2_12_x has been updated
       via  d6b983dee475d1597687c3dcbca54c5842e3fc7f (commit)
      from  970ad11ec495be05039ba658d6f523a18bba7e63 (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 d6b983dee475d1597687c3dcbca54c5842e3fc7f
Author: Nikos Mavrogiannopoulos <address@hidden>
Date:   Sun Apr 1 21:16:05 2012 +0200

    updated libtasn1

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

Summary of changes:
 NEWS                     |    9 +++
 lib/minitasn1/decoding.c |  145 +++++++++++++++++++++++++---------------------
 2 files changed, 88 insertions(+), 66 deletions(-)

diff --git a/NEWS b/NEWS
index 41a9a48..1f72315 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,15 @@ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
               2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 See the end for copying conditions.
 
+Version 2.12.19 (unreleased)
+
+** minitasn1: Upgraded to libtasn1 version 2.13 (pre-release).
+
+** API and ABI modifications:
+
+No changes since last version.
+
+
 Version 2.12.18 (released 2012-03-16)
 
 ** minitasn1: Upgraded to libtasn1 version 2.12 (pre-release).
diff --git a/lib/minitasn1/decoding.c b/lib/minitasn1/decoding.c
index 968fa96..1cfad35 100644
--- a/lib/minitasn1/decoding.c
+++ b/lib/minitasn1/decoding.c
@@ -30,6 +30,7 @@
 #include <gstr.h>
 #include "structure.h"
 #include "element.h"
+#include <limits.h>
 
 static asn1_retCode
 _asn1_get_indefinite_length_string (const unsigned char *der, int *len);
@@ -60,8 +61,8 @@ _asn1_error_description_tag_error (ASN1_TYPE node, char 
*ErrorDescription)
 signed long
 asn1_get_length_der (const unsigned char *der, int der_len, int *len)
 {
-  int ans;
-  int k, punt;
+  unsigned int ans, sum, last;
+  unsigned int k, punt;
 
   *len = 0;
   if (der_len <= 0)
@@ -71,7 +72,7 @@ asn1_get_length_der (const unsigned char *der, int der_len, 
int *len)
     {
       /* short form */
       *len = 1;
-      return der[0];
+      ans = der[0];
     }
   else
     {
@@ -83,10 +84,10 @@ asn1_get_length_der (const unsigned char *der, int der_len, 
int *len)
          ans = 0;
          while (punt <= k && punt < der_len)
            {
-             int last = ans;
+             last = ans;
 
-             ans = ans * 256 + der[punt++];
-             if (ans < last)
+             ans = (ans*256) + der[punt++];
+             if (ans < last) 
                /* we wrapped around, no bignum support... */
                return -2;
            }
@@ -98,10 +99,19 @@ asn1_get_length_der (const unsigned char *der, int der_len, 
int *len)
        }
 
       *len = punt;
-      if (ans + *len < ans || ans + *len > der_len)
-       return -4;
-      return ans;
     }
+
+  sum = ans + *len;
+  
+  /* check for overflow as well INT_MAX as a maximum upper
+   * limit for length */
+  if (sum >= INT_MAX || sum < ans)
+    return -2;
+  
+  if (sum > der_len)
+    return -4;
+
+  return ans;
 }
 
 /**
@@ -120,7 +130,8 @@ int
 asn1_get_tag_der (const unsigned char *der, int der_len,
                  unsigned char *cls, int *len, unsigned long *tag)
 {
-  int punt, ris;
+  unsigned int punt, ris;
+  unsigned int last;
 
   if (der == NULL || der_len < 2 || len == NULL)
     return ASN1_DER_ERROR;
@@ -139,21 +150,23 @@ asn1_get_tag_der (const unsigned char *der, int der_len,
       ris = 0;
       while (punt <= der_len && der[punt] & 128)
        {
-         int last = ris;
-         ris = ris * 128 + (der[punt++] & 0x7F);
+         last = ris;
+
+         ris = (ris * 128) + (der[punt++] & 0x7F);
          if (ris < last)
-           /* wrapper around, and no bignums... */
+           /* wrapped around, and no bignums... */
            return ASN1_DER_ERROR;
        }
+
       if (punt >= der_len)
        return ASN1_DER_ERROR;
-      {
-       int last = ris;
-       ris = ris * 128 + (der[punt++] & 0x7F);
-       if (ris < last)
-         /* wrapper around, and no bignums... */
-         return ASN1_DER_ERROR;
-      }
+
+      last = ris;
+        
+      ris = (ris * 128) + (der[punt++] & 0x7F);
+      if (ris < last)
+        return ASN1_DER_ERROR;
+
       *len = punt;
     }
   if (tag)
@@ -1031,10 +1044,10 @@ asn1_der_decoding (ASN1_TYPE * element, const void 
*ider, int len,
              len2 =
                asn1_get_length_der (der + counter, len - counter, &len3);
              if (len2 < 0)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              _asn1_set_value (p, der + counter, len3 + len2);
              counter += len3 + len2;
@@ -1045,7 +1058,7 @@ asn1_der_decoding (ASN1_TYPE * element, const void *ider, 
int len,
                _asn1_get_objectid_der (der + counter, len - counter, &len2,
                                        temp, sizeof (temp));
              if (result != ASN1_SUCCESS)
-                goto cleanup;
+               goto cleanup;
 
              tlen = strlen (temp);
              if (tlen > 0)
@@ -1070,7 +1083,7 @@ asn1_der_decoding (ASN1_TYPE * element, const void *ider, 
int len,
              len3 = len - counter;
              result = _asn1_get_octet_string (der + counter, p, &len3);
              if (result != ASN1_SUCCESS)
-                goto cleanup;
+               goto cleanup;
 
              counter += len3;
              move = RIGHT;
@@ -1079,10 +1092,10 @@ asn1_der_decoding (ASN1_TYPE * element, const void 
*ider, int len,
              len2 =
                asn1_get_length_der (der + counter, len - counter, &len3);
              if (len2 < 0)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              _asn1_set_value (p, der + counter, len3 + len2);
              counter += len3 + len2;
@@ -1092,10 +1105,10 @@ asn1_der_decoding (ASN1_TYPE * element, const void 
*ider, int len,
              len2 =
                asn1_get_length_der (der + counter, len - counter, &len3);
              if (len2 < 0)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              _asn1_set_value (p, der + counter, len3 + len2);
              counter += len3 + len2;
@@ -1118,10 +1131,10 @@ asn1_der_decoding (ASN1_TYPE * element, const void 
*ider, int len,
                            }
                        }
                      else
-                       {
+                       {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
                      counter += 2;
                    }
                  else
@@ -1142,7 +1155,7 @@ asn1_der_decoding (ASN1_TYPE * element, const void *ider, 
int len,
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  counter += len2;
                  if (len3 > 0)
                    {
@@ -1183,10 +1196,10 @@ asn1_der_decoding (ASN1_TYPE * element, const void 
*ider, int len,
                  if (len2 == -1)
                    {           /* indefinite length method */
                      if ((counter + 2) > len)
-                       {
+                       {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
 
                      if ((der[counter]) || der[counter + 1])
                        {
@@ -1227,7 +1240,7 @@ asn1_der_decoding (ASN1_TYPE * element, const void *ider, 
int len,
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  counter += len2;
                  if (len3)
                    {
@@ -1258,24 +1271,24 @@ asn1_der_decoding (ASN1_TYPE * element, const void 
*ider, int len,
              if (asn1_get_tag_der
                  (der + counter, len - counter, &class, &len2,
                   &tag) != ASN1_SUCCESS)
-                {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              if (counter + len2 > len)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
              len4 =
                asn1_get_length_der (der + counter + len2,
                                     len - counter - len2, &len3);
              if (len4 < -1)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
              if (len4 != -1)
                {
                  len2 += len4;
@@ -1311,7 +1324,7 @@ asn1_der_decoding (ASN1_TYPE * element, const void *ider, 
int len,
                        {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
                    }
                }
              move = RIGHT;
@@ -1657,10 +1670,10 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
              len2 =
                asn1_get_length_der (der + counter, len - counter, &len3);
              if (len2 < 0)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              if (state == FOUND)
                {
@@ -1668,7 +1681,7 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  _asn1_set_value (p, der + counter, len3 + len2);
 
                  if (p == nodeFound)
@@ -1702,7 +1715,7 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  len2 += len3;
                }
 
@@ -1733,7 +1746,7 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  len2 += len3;
                }
 
@@ -1761,10 +1774,10 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
              len2 =
                asn1_get_length_der (der + counter, len - counter, &len3);
              if (len2 < 0)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              if (state == FOUND)
                {
@@ -1772,7 +1785,7 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  _asn1_set_value (p, der + counter, len3 + len2);
 
                  if (p == nodeFound)
@@ -1785,17 +1798,17 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
              len2 =
                asn1_get_length_der (der + counter, len - counter, &len3);
              if (len2 < 0)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
              if (state == FOUND)
                {
                  if (len3 + len2 > len - counter)
                    {
                      result = ASN1_DER_ERROR;
                      goto cleanup;
-                    }
+                   }
                  _asn1_set_value (p, der + counter, len3 + len2);
 
                  if (p == nodeFound)
@@ -1839,10 +1852,10 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                        asn1_get_length_der (der + counter, len - counter,
                                             &len2);
                      if (len3 < 0)
-                       {
+                       {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
                      counter += len2 + len3;
                      move = RIGHT;
                    }
@@ -1852,10 +1865,10 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                        asn1_get_length_der (der + counter, len - counter,
                                             &len2);
                      if (len3 < 0)
-                       {
+                       {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
                      counter += len2;
                      if (len3 > 0)
                        {
@@ -1922,10 +1935,10 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                        asn1_get_length_der (der + counter, len - counter,
                                             &len2);
                      if (len3 < 0)
-                       {
+                       {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
                      counter += len2 + len3;
                      move = RIGHT;
                    }
@@ -1935,10 +1948,10 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
                        asn1_get_length_der (der + counter, len - counter,
                                             &len2);
                      if (len3 < 0)
-                       {
+                       {
                          result = ASN1_DER_ERROR;
                          goto cleanup;
-                        }
+                       }
                      counter += len2;
                      if (len3)
                        {
@@ -1964,25 +1977,25 @@ asn1_der_decoding_element (ASN1_TYPE * structure, const 
char *elementName,
              if (asn1_get_tag_der
                  (der + counter, len - counter, &class, &len2,
                   &tag) != ASN1_SUCCESS)
-                {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              if (counter + len2 > len)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              len4 =
                asn1_get_length_der (der + counter + len2,
                                     len - counter - len2, &len3);
              if (len4 < -1)
-               {
+               {
                  result = ASN1_DER_ERROR;
                  goto cleanup;
-                }
+               }
 
              if (len4 != -1)
                {


hooks/post-receive
-- 
GNU gnutls



reply via email to

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