]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Corrections in the new session packing code. Saving absolute positions in buffers...
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sat, 19 Jun 2010 16:11:18 +0000 (18:11 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sat, 19 Jun 2010 16:11:18 +0000 (18:11 +0200)
longer done. Now we store only and offset to allow reallocating the buffer and still
do the correct reference.

lib/gnutls_extensions.c
lib/gnutls_session_pack.c

index f316d5c7cedebfc92db5141e212361cbecb23b9a..cd5d0a29a806772309b966ce2bb7254abda99c8d 100644 (file)
@@ -430,7 +430,7 @@ int _gnutls_ext_pack(gnutls_session_t session, gnutls_buffer_st* packed)
 int i, ret;
 extension_priv_data_t data;
 int cur_size;
-void* size_pos;
+int size_offset;
 void* total_exts_pos;
 int exts = 0;
 
@@ -445,8 +445,7 @@ int exts = 0;
         {
          BUFFER_APPEND_NUM(packed, extfunc[i].type);
          
-         size_pos = packed->data + packed->length;
-         
+         size_offset = packed->length;
          BUFFER_APPEND_NUM(packed, 0);
          
          cur_size = packed->length;
@@ -460,7 +459,7 @@ int exts = 0;
          
          exts++;
          /* write the actual size */
-         _gnutls_write_uint32(packed->length-cur_size, size_pos);
+         _gnutls_write_uint32(packed->length-cur_size, packed->data+size_offset);
         }
     }
 
index 03e7909cd25402886156624c5a2165fa26117293..6ad507f8d7b4a0d23d29b1aff3ffb15597137fd0 100644 (file)
@@ -302,10 +302,9 @@ pack_certificate_auth_info (gnutls_session_t session,
   unsigned int i;
   int cur_size, ret;
   cert_auth_info_t info = _gnutls_get_auth_info (session);
-  void* size_pos;
-
-  size_pos = ps->data + ps->length; 
+  int size_offset;
 
+  size_offset = ps->length;
   BUFFER_APPEND_NUM(ps, 0);
   cur_size = ps->length;
 
@@ -326,7 +325,7 @@ pack_certificate_auth_info (gnutls_session_t session,
     }
 
   /* write the real size */
-  _gnutls_write_uint32(ps->length-cur_size, size_pos);
+  _gnutls_write_uint32(ps->length-cur_size, ps->data+size_offset);
 
   return 0;
 }
@@ -428,7 +427,7 @@ pack_srp_auth_info (gnutls_session_t session, gnutls_buffer_st * ps)
 {
   srp_server_auth_info_t info = _gnutls_get_auth_info (session);
   int len, ret;
-  void* size_pos;
+  int size_offset;
   size_t cur_size;
 
   if (info && info->username)
@@ -436,15 +435,14 @@ pack_srp_auth_info (gnutls_session_t session, gnutls_buffer_st * ps)
   else
     len = 0;
 
-  size_pos = ps->data + ps->length;
-
+  size_offset = ps->length;
   BUFFER_APPEND_NUM(ps, 0);
   cur_size = ps->length;
 
   BUFFER_APPEND_PFX(ps, info->username, len);
 
   /* write the real size */
-  _gnutls_write_uint32(ps->length-cur_size, size_pos);
+  _gnutls_write_uint32(ps->length-cur_size, ps->data+size_offset);
 
   return 0;
 }
@@ -513,10 +511,9 @@ pack_anon_auth_info (gnutls_session_t session,
 {
   int cur_size, ret;
   anon_auth_info_t info = _gnutls_get_auth_info (session);
-  void* size_pos;
-
-  size_pos = ps->data + ps->length;
+  int size_offset;
 
+  size_offset = ps->length;
   BUFFER_APPEND_NUM(ps, 0);
   cur_size = ps->length;
 
@@ -529,7 +526,7 @@ pack_anon_auth_info (gnutls_session_t session,
     }
 
   /* write the real size */
-  _gnutls_write_uint32(ps->length-cur_size, size_pos);
+  _gnutls_write_uint32(ps->length-cur_size, ps->data+size_offset);
 
   return 0;
 }
@@ -610,7 +607,7 @@ pack_psk_auth_info (gnutls_session_t session, gnutls_buffer_st * ps)
   psk_auth_info_t info;
   int username_len;
   int hint_len, ret;
-  void* size_pos;
+  int size_offset;
   size_t cur_size;
 
   info = _gnutls_get_auth_info (session);
@@ -625,8 +622,7 @@ pack_psk_auth_info (gnutls_session_t session, gnutls_buffer_st * ps)
   else
     hint_len = 0;
 
-  size_pos = ps->data + ps->length;
-
+  size_offset = ps->length;
   BUFFER_APPEND_NUM(ps, 0);
   cur_size = ps->length;
 
@@ -639,7 +635,7 @@ pack_psk_auth_info (gnutls_session_t session, gnutls_buffer_st * ps)
   BUFFER_APPEND_PFX( ps, info->dh.public_key.data, info->dh.public_key.size);
 
   /* write the real size */
-  _gnutls_write_uint32(ps->length-cur_size, size_pos);
+  _gnutls_write_uint32(ps->length-cur_size, ps->data+size_offset);
 
   return 0;
 }
@@ -742,13 +738,12 @@ pack_security_parameters (gnutls_session_t session,
 {
 
   int ret;
-  void* size_pos;
+  int size_offset;
   size_t cur_size;
 
   /* move after the auth info stuff.
    */
-  size_pos = ps->data + ps->length;
-
+  size_offset = ps->length;
   BUFFER_APPEND_NUM(ps, 0);
   cur_size = ps->length;
 
@@ -776,7 +771,7 @@ pack_security_parameters (gnutls_session_t session,
 
   BUFFER_APPEND_NUM(ps, session->security_parameters.timestamp);
 
-  _gnutls_write_uint32(ps->length-cur_size, size_pos);
+  _gnutls_write_uint32(ps->length-cur_size, ps->data+size_offset);
 
   return 0;
 }