From 17031f12fe62708ca84db3a8551267ca2a0e24d8 Mon Sep 17 00:00:00 2001
From: Badalyan Vyacheslav <v.badalyan@open-bs.ru>
Date: Mon, 10 Oct 2016 17:59:58 -0400
Subject: [PATCH] vector: After remove element recheck index

Small fix. It is necessary to double-check
the index that we just removed because there
is a new element.

ASTERISK-26453 #close

Change-Id: Ib947fa94dc91dcd9341f357f1084782c64434eb7
---
 include/asterisk/vector.h | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/include/asterisk/vector.h b/include/asterisk/vector.h
index b4a8a2c113..c74f0a89b5 100644
--- a/include/asterisk/vector.h
+++ b/include/asterisk/vector.h
@@ -367,11 +367,13 @@
 	int count = 0;							\
 	size_t idx;							\
 	typeof(value) __value = (value);				\
-	for (idx = 0; idx < (vec)->current; ++idx) {			\
+	for (idx = 0; idx < (vec)->current; ) {				\
 		if (cmp((vec)->elems[idx], __value)) {			\
 			cleanup((vec)->elems[idx]);			\
 			AST_VECTOR_REMOVE_UNORDERED((vec), idx);	\
 			++count;					\
+		} else {						\
+			++idx;						\
 		}							\
 	}								\
 	count;								\
@@ -417,14 +419,16 @@
 	int count = 0;							\
 	size_t idx;							\
 	typeof(value) __value = (value);				\
-	for (idx = 0; idx < (vec)->current; ++idx) {			\
+	for (idx = 0; idx < (vec)->current; ) {				\
 		if (cmp((vec)->elems[idx], __value)) {			\
 			cleanup((vec)->elems[idx]);			\
-			AST_VECTOR_REMOVE_ORDERED((vec), idx);	\
+			AST_VECTOR_REMOVE_ORDERED((vec), idx);		\
 			++count;					\
+		} else {						\
+			++idx;						\
 		}							\
 	}								\
-	oount;								\
+	count;								\
 })
 
 /*!
@@ -445,7 +449,7 @@
 	for (idx = 0; idx < (vec)->current; ++idx) {			\
 		if (cmp((vec)->elems[idx], __value)) {			\
 			cleanup((vec)->elems[idx]);			\
-			AST_VECTOR_REMOVE_ORDERED((vec), idx);	\
+			AST_VECTOR_REMOVE_ORDERED((vec), idx);		\
 			res = 0;					\
 			break;						\
 		}							\
-- 
GitLab