]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
when removing a cipher priority, make sure the order is kept
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 3 Jul 2013 06:29:26 +0000 (08:29 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 3 Jul 2013 06:30:12 +0000 (08:30 +0200)
lib/gnutls_priority.c

index e07afd3e1d6d48e350086c0c2e0580c9e3f8b3f9..ed4565aa9f55378eee3aef5936e37dd4ff356cc9 100644 (file)
@@ -556,21 +556,17 @@ typedef void (rmadd_func) (priority_st * priority_list, unsigned int alg);
 static void
 prio_remove (priority_st * priority_list, unsigned int algo)
 {
-  int i = 0;
-  int pos = -1;                 /* the position of the cipher to remove */
+  unsigned int i;
 
-  while (priority_list->priority[i] != 0)
+  for (i=0;i<priority_list->algorithms;i++)
     {
-      if (priority_list->priority[i] == algo)
-        pos = i;
-      i++;
-    }
-
-  if (pos >= 0)
-    {
-      priority_list->priority[pos] = priority_list->priority[i - 1];
-      priority_list->priority[i - 1] = 0;
-      priority_list->algorithms--;
+      if (priority_list->priority[i] == algo) 
+        {
+          priority_list->algorithms--;
+          if (priority_list->algorithms-i) > 0)
+            memmove(&priority_list->priority[i], &priority_list->priority[i+1], (priority_list->algorithms-i)*sizeof(priority_list->priority[0]));
+          break;
+        }
     }
 
   return;