Przeglądaj źródła

msrp: proper cmap insert when last item has greater citemid

- condition for last item was processed first, resulting in improper
  order of items, GH #3215

(cherry picked from commit 1e4bf1dd7fbfc9d51f0e56e98472a42de781cdbd)
(cherry picked from commit a5cbf0bade8ab0b04d1f8e9288b239df4df8d76b)
(cherry picked from commit 0333468742b66760f055c8d4045c3996a801dc59)
Daniel-Constantin Mierla 3 lat temu
rodzic
commit
626d9b4078
1 zmienionych plików z 13 dodań i 12 usunięć
  1. 13 12
      src/modules/msrp/msrp_cmap.c

+ 13 - 12
src/modules/msrp/msrp_cmap.c

@@ -270,20 +270,21 @@ int msrp_cmap_save(msrp_frame_t *mf)
 	} else {
 		for(itb=_msrp_cmap_head->cslots[idx].first; itb; itb=itb->next)
 		{
-			if(itb->citemid>it->citemid || itb->next==NULL) {
-				if(itb->next==NULL) {
-					itb->next=it;
-					it->prev = itb;
+			if(itb->citemid>it->citemid) {
+				/* insert before current item */
+				it->next = itb;
+				if(itb->prev==NULL) {
+					_msrp_cmap_head->cslots[idx].first = it;
 				} else {
-					it->next = itb;
-					if(itb->prev==NULL) {
-						_msrp_cmap_head->cslots[idx].first = it;
-					} else {
-						itb->prev->next = it;
-					}
-					it->prev = itb->prev;
-					itb->prev = it;
+					itb->prev->next = it;
 				}
+				it->prev = itb->prev;
+				itb->prev = it;
+				break;
+			} else if(itb->next==NULL) {
+				/* insert after last item */
+				itb->next=it;
+				it->prev = itb;
 				break;
 			}
 		}