]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
simplified _gnutls_supported_compression_methods().
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sat, 28 May 2011 21:54:33 +0000 (23:54 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sat, 28 May 2011 21:54:33 +0000 (23:54 +0200)
lib/gnutls_compress.c
lib/gnutls_compress.h
lib/gnutls_handshake.c

index 2c5fa09b03564ffd82859695c2b83f6e193ddbac..cb8d65b99f09cf48330cf3c377e327e879570b60 100644 (file)
@@ -256,13 +256,12 @@ _gnutls_compression_is_ok (gnutls_compression_method_t algorithm)
 #define SUPPORTED_COMPRESSION_METHODS session->internals.priorities.compression.algorithms
 int
 _gnutls_supported_compression_methods (gnutls_session_t session,
-                                       uint8_t ** comp)
+                                       uint8_t * comp, size_t comp_size)
 {
   unsigned int i, j;
 
-  *comp = gnutls_malloc (sizeof (uint8_t) * SUPPORTED_COMPRESSION_METHODS);
-  if (*comp == NULL)
-    return GNUTLS_E_MEMORY_ERROR;
+  if (comp_size < SUPPORTED_COMPRESSION_METHODS)
+    return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR);
 
   for (i = j = 0; i < SUPPORTED_COMPRESSION_METHODS; i++)
     {
@@ -279,15 +278,13 @@ _gnutls_supported_compression_methods (gnutls_session_t session,
           continue;
         }
 
-      (*comp)[j] = (uint8_t) tmp;
+      comp[j] = (uint8_t) tmp;
       j++;
     }
 
   if (j == 0)
     {
       gnutls_assert ();
-      gnutls_free (*comp);
-      *comp = NULL;
       return GNUTLS_E_NO_COMPRESSION_ALGORITHMS;
     }
   return j;
index 35af229d5c9aed4db84d058434f57547fc39e7b6..ca58bdf70a4e306e277456461d4cf32e43a0cfbd 100644 (file)
@@ -36,7 +36,7 @@ int _gnutls_m_compressed2plaintext (gnutls_session_t session,
 
 /* Algorithm handling. */
 int _gnutls_supported_compression_methods (gnutls_session_t session,
-                                           uint8_t *comp);
+                                           uint8_t * comp, size_t max_comp);
 int _gnutls_compression_is_ok (gnutls_compression_method_t algorithm);
 int _gnutls_compression_get_num (gnutls_compression_method_t algorithm);
 gnutls_compression_method_t _gnutls_compression_get_id (int num);
index 02467b46ecde565d2e763e8a08621504eb73ae39..9eeafae5e84d51a43b99c9af51b1edde414d8f03 100644 (file)
@@ -1052,9 +1052,9 @@ _gnutls_server_select_comp_method (gnutls_session_t session,
                                    opaque * data, int datalen)
 {
   int x, i, j;
-  uint8_t *comps;
+  uint8_t comps[MAX_ALGOS];
 
-  x = _gnutls_supported_compression_methods (session, &comps);
+  x = _gnutls_supported_compression_methods (session, comps, MAX_ALGOS);
   if (x < 0)
     {
       gnutls_assert ();
@@ -1070,8 +1070,6 @@ _gnutls_server_select_comp_method (gnutls_session_t session,
               gnutls_compression_method_t method =
                 _gnutls_compression_get_id (comps[i]);
 
-              gnutls_free (comps);
-
               _gnutls_epoch_set_compression (session, EPOCH_NEXT, method);
               session->security_parameters.compression_method = method;
 
@@ -1088,7 +1086,6 @@ _gnutls_server_select_comp_method (gnutls_session_t session,
   /* we were not able to find a compatible compression
    * algorithm
    */
-  gnutls_free (comps);
   gnutls_assert ();
   return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM;
 
@@ -1538,7 +1535,7 @@ static int
 _gnutls_client_set_comp_method (gnutls_session_t session, opaque comp_method)
 {
   int comp_methods_num;
-  uint8_t *compression_methods;
+  uint8_t compression_methods[MAX_ALGOS];
   int id = _gnutls_compression_get_id(comp_method);
   int i;
 
@@ -1546,7 +1543,7 @@ _gnutls_client_set_comp_method (gnutls_session_t session, opaque comp_method)
                          gnutls_compression_get_name(id), (int)comp_method);
 
   comp_methods_num = _gnutls_supported_compression_methods (session,
-                                                            &compression_methods);
+                                                            compression_methods, MAX_ALGOS);
   if (comp_methods_num < 0)
     {
       gnutls_assert ();
@@ -1562,8 +1559,6 @@ _gnutls_client_set_comp_method (gnutls_session_t session, opaque comp_method)
         }
     }
 
-  gnutls_free (compression_methods);
-
   if (comp_methods_num != 0)
     {
       gnutls_assert ();
@@ -1849,42 +1844,27 @@ static int
 _gnutls_copy_comp_methods (gnutls_session_t session,
                            gnutls_buffer_st * cdata)
 {
-  int ret, i;
-  uint8_t *compression_methods, comp_num;
+  int ret;
+  uint8_t compression_methods[MAX_ALGOS], comp_num;
   size_t init_length = cdata->length;
 
-  ret = _gnutls_supported_compression_methods (session, &compression_methods);
+  ret = _gnutls_supported_compression_methods (session, compression_methods, MAX_ALGOS);
   if (ret < 0)
-    {
-      gnutls_assert ();
-      return ret;
-    }
+    return gnutls_assert_val(ret);
 
   comp_num = ret;
 
   /* put the number of compression methods */
   ret = _gnutls_buffer_append_prefix(cdata, 8, comp_num);
   if (ret < 0)
-    {
-      gnutls_assert();
-      goto cleanup;
-    }
+    return gnutls_assert_val(ret);
 
-  for (i = 0; i < comp_num; i++)
-    {
-      ret = _gnutls_buffer_append_data(cdata, &compression_methods[i], 1);
-      if (ret < 0)
-        {
-          gnutls_assert();
-          goto cleanup;
-        }
-    }
+  ret = _gnutls_buffer_append_data(cdata, compression_methods, comp_num);
+  if (ret < 0)
+    return gnutls_assert_val(ret);
 
   ret = cdata->length - init_length;
 
-cleanup:
-  gnutls_free (compression_methods);
-
   return ret;
 }