gnutls-commit
[Top][All Lists]
Advanced

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

[SCM] GNU gnutls branch, master, updated. gnutls_2_9_7-23-gade5dda


From: Daiki Ueno
Subject: [SCM] GNU gnutls branch, master, updated. gnutls_2_9_7-23-gade5dda
Date: Mon, 26 Oct 2009 06:19:19 +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=ade5dda1564fddec5c90c91bebf9cefeca51eaf5

The branch, master has been updated
       via  ade5dda1564fddec5c90c91bebf9cefeca51eaf5 (commit)
      from  dc18e91405903607a7c5c8a9b185f8c286c244b6 (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 ade5dda1564fddec5c90c91bebf9cefeca51eaf5
Author: Daiki Ueno <address@hidden>
Date:   Sun Oct 25 23:05:13 2009 -0700

    Enable ClientHello to carry arbitrary length extension data.

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

Summary of changes:
 lib/gnutls_handshake.c |   68 +++++++++++++++++++++++++++++------------------
 1 files changed, 42 insertions(+), 26 deletions(-)

diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c
index 93e0553..7d5a820 100644
--- a/lib/gnutls_handshake.c
+++ b/lib/gnutls_handshake.c
@@ -1797,7 +1797,7 @@ _gnutls_send_client_hello (gnutls_session_t session, int 
again)
   int datalen = 0, ret = 0;
   opaque rnd[GNUTLS_RANDOM_SIZE];
   gnutls_protocol_t hver;
-  opaque extdata[MAX_EXT_DATA_LENGTH];
+  opaque *extdata = NULL;
   int rehandshake = 0;
 
   opaque *SessionID =
@@ -1827,6 +1827,17 @@ _gnutls_send_client_hello (gnutls_session_t session, int 
again)
          return GNUTLS_E_MEMORY_ERROR;
        }
 
+      extdatalen = MAX_EXT_DATA_LENGTH
+       + session->internals.resumed_security_parameters.extensions.
+       session_ticket_len;
+      extdata = gnutls_malloc (extdatalen);
+      if (extdata == NULL)
+       {
+         gnutls_assert ();
+         gnutls_free (data);
+         return GNUTLS_E_MEMORY_ERROR;
+       }
+
       /* if we are resuming a session then we set the
        * version number to the previously established.
        */
@@ -1846,6 +1857,7 @@ _gnutls_send_client_hello (gnutls_session_t session, int 
again)
        {
          gnutls_assert ();
          gnutls_free (data);
+         gnutls_free (extdata);
          return GNUTLS_E_INTERNAL_ERROR;
        }
 
@@ -1901,85 +1913,89 @@ _gnutls_send_client_hello (gnutls_session_t session, 
int again)
 
       /* Copy the ciphersuites.
        */
-      extdatalen =
-       _gnutls_copy_ciphersuites (session, extdata, sizeof (extdata));
-      if (extdatalen > 0)
+      ret = _gnutls_copy_ciphersuites (session, extdata, extdatalen);
+      if (ret > 0)
        {
-         datalen += extdatalen;
+         datalen += ret;
          data = gnutls_realloc_fast (data, datalen);
          if (data == NULL)
            {
              gnutls_assert ();
+             gnutls_free (extdata);
              return GNUTLS_E_MEMORY_ERROR;
            }
 
-         memcpy (&data[pos], extdata, extdatalen);
-         pos += extdatalen;
+         memcpy (&data[pos], extdata, ret);
+         pos += ret;
 
        }
       else
        {
-         if (extdatalen == 0)
-           extdatalen = GNUTLS_E_INTERNAL_ERROR;
+         if (ret == 0)
+           ret = GNUTLS_E_INTERNAL_ERROR;
          gnutls_free (data);
+         gnutls_free (extdata);
          gnutls_assert ();
-         return extdatalen;
+         return ret;
        }
 
 
       /* Copy the compression methods.
        */
-      extdatalen =
-       _gnutls_copy_comp_methods (session, extdata, sizeof (extdata));
-      if (extdatalen > 0)
+      ret = _gnutls_copy_comp_methods (session, extdata, extdatalen);
+      if (ret > 0)
        {
-         datalen += extdatalen;
+         datalen += ret;
          data = gnutls_realloc_fast (data, datalen);
          if (data == NULL)
            {
              gnutls_assert ();
+             gnutls_free (extdata);
              return GNUTLS_E_MEMORY_ERROR;
            }
 
-         memcpy (&data[pos], extdata, extdatalen);
-         pos += extdatalen;
+         memcpy (&data[pos], extdata, ret);
+         pos += ret;
 
        }
       else
        {
-         if (extdatalen == 0)
-           extdatalen = GNUTLS_E_INTERNAL_ERROR;
+         if (ret == 0)
+           ret = GNUTLS_E_INTERNAL_ERROR;
          gnutls_free (data);
+         gnutls_free (extdata);
          gnutls_assert ();
-         return extdatalen;
+         return ret;
        }
 
       /* Generate and copy TLS extensions.
        */
       if (_gnutls_version_has_extensions(hver))
        {
-         extdatalen =
-           _gnutls_gen_extensions (session, extdata, sizeof (extdata));
+         ret = _gnutls_gen_extensions (session, extdata, extdatalen);
 
-         if (extdatalen > 0)
+         if (ret > 0)
            {
-             datalen += extdatalen;
+             datalen += ret;
              data = gnutls_realloc_fast (data, datalen);
              if (data == NULL)
                {
                  gnutls_assert ();
+                 gnutls_free (extdata);
                  return GNUTLS_E_MEMORY_ERROR;
                }
 
-             memcpy (&data[pos], extdata, extdatalen);
+             memcpy (&data[pos], extdata, ret);
            }
-         else if (extdatalen < 0)
+         else if (ret < 0)
            {
              gnutls_assert ();
              gnutls_free (data);
-             return extdatalen;
+             gnutls_free (extdata);
+             return ret;
            }
        }
+      gnutls_free (extdata);
     }
 
   ret =


hooks/post-receive
-- 
GNU gnutls




reply via email to

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