]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
small optimizations in session storage
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 27 Feb 2013 16:01:12 +0000 (17:01 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 27 Feb 2013 16:01:12 +0000 (17:01 +0100)
lib/gnutls_db.h
lib/gnutls_int.h
lib/gnutls_record.c
lib/gnutls_session_pack.c

index ca698e4a2d19eb00baea90f42ecae6ebfc805d05..4dc8c77858f627a21aa36292fbeeb142f503e056 100644 (file)
@@ -25,4 +25,4 @@ int _gnutls_server_restore_session (gnutls_session_t session,
                                     uint8_t * session_id,
                                     int session_id_size);
 
-#define PACKED_SESSION_MAGIC 0xfadebade
+#define PACKED_SESSION_MAGIC 0xfadebadd
index e5ed413609bf34a4a6af7ce9904c34f7a41cf63f..8c58b4abd106ca09b2cf7bab80b1af1dd855a28d 100644 (file)
@@ -518,7 +518,7 @@ typedef struct
   time_t timestamp;
   
   /* if non-zero the new record padding is used */
-  unsigned int new_record_padding;
+  uint8_t new_record_padding;
 
   /* The send size is the one requested by the programmer.
    * The recv size is the one negotiated with the peer.
index 5b7d47e465b2620e8f2bd34c06c479d78e7721dc..d1b242749ddec9d603c19fbe9d9e4b80043c6ff5 100644 (file)
@@ -500,6 +500,9 @@ _gnutls_send_tlen_int (gnutls_session_t session, content_type_t type,
     }
   else
     send_data_size = data_size;
+  
+  if (unlikely(send_data_size == 0))
+    return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR);
 
   /* Only encrypt if we don't have data to send 
    * from the previous run. - probably interrupted.
index d3088fb3496010e5605861b548e3a545fd6e9866..035e0f86fe9e2a80b1a492f357cd65e3172d20e1 100644 (file)
@@ -97,7 +97,6 @@ _gnutls_session_pack (gnutls_session_t session,
 
   id = gnutls_auth_get_type (session);
 
-  /* first is the timestamp */
   BUFFER_APPEND_NUM(&sb, PACKED_SESSION_MAGIC);
   BUFFER_APPEND_NUM(&sb, session->security_parameters.timestamp);
   BUFFER_APPEND (&sb, &id, 1);
@@ -205,10 +204,12 @@ _gnutls_session_unpack (gnutls_session_t session,
       _gnutls_free_auth_info (session);
     }
 
-  /* the timestamp is first */
   BUFFER_POP_NUM (&sb, magic);
   if (magic != PACKED_SESSION_MAGIC)
-    return gnutls_assert_val(GNUTLS_E_DB_ERROR);
+    {
+      ret = gnutls_assert_val(GNUTLS_E_DB_ERROR);
+      goto error;
+    }
 
   BUFFER_POP_NUM (&sb, session->internals.resumed_security_parameters.timestamp);
   BUFFER_POP (&sb, &id, 1);
@@ -789,13 +790,13 @@ pack_security_parameters (gnutls_session_t session, gnutls_buffer_st * ps)
   BUFFER_APPEND (ps, session->security_parameters.server_random,
                  GNUTLS_RANDOM_SIZE);
 
-  BUFFER_APPEND_NUM (ps, session->security_parameters.session_id_size);
+  BUFFER_APPEND (ps, &session->security_parameters.session_id_size, 1);
   BUFFER_APPEND (ps, session->security_parameters.session_id,
                  session->security_parameters.session_id_size);
 
   BUFFER_APPEND_NUM (ps, session->security_parameters.max_record_send_size);
   BUFFER_APPEND_NUM (ps, session->security_parameters.max_record_recv_size);
-  BUFFER_APPEND_NUM (ps, session->security_parameters.new_record_padding);
+  BUFFER_APPEND (ps, &session->security_parameters.new_record_padding, 1);
   BUFFER_APPEND_NUM (ps, session->security_parameters.ecc_curve);
 
   _gnutls_write_uint32 (ps->length - cur_size, ps->data + size_offset);
@@ -842,9 +843,8 @@ unpack_security_parameters (gnutls_session_t session, gnutls_buffer_st * ps)
   BUFFER_POP (ps,
               session->internals.resumed_security_parameters.server_random,
               GNUTLS_RANDOM_SIZE);
-  BUFFER_POP_NUM (ps,
-                  session->internals.
-                  resumed_security_parameters.session_id_size);
+  BUFFER_POP (ps, &session->internals.
+                  resumed_security_parameters.session_id_size, 1);
 
   BUFFER_POP (ps, session->internals.resumed_security_parameters.session_id,
               session->internals.resumed_security_parameters.session_id_size);
@@ -856,8 +856,7 @@ unpack_security_parameters (gnutls_session_t session, gnutls_buffer_st * ps)
                   session->internals.
                   resumed_security_parameters.max_record_recv_size);
 
-  BUFFER_POP_NUM (ps,
-                  session->internals.resumed_security_parameters.new_record_padding);
+  BUFFER_POP (ps, &session->internals.resumed_security_parameters.new_record_padding, 1);
 
   BUFFER_POP_NUM (ps,
                   session->internals.resumed_security_parameters.ecc_curve);
@@ -942,7 +941,7 @@ gnutls_session_set_premaster (gnutls_session_t session, unsigned int entity,
   session->internals.resumed_security_parameters.max_record_send_size = 
   session->internals.resumed_security_parameters.max_record_recv_size = DEFAULT_MAX_RECORD_SIZE;
 
-  session->internals.resumed_security_parameters.timestamp = time(0);
+  session->internals.resumed_security_parameters.timestamp = gnutls_time(0);
 
   session->internals.resumed_security_parameters.ecc_curve = GNUTLS_ECC_CURVE_INVALID;