2
0
Эх сурвалжийг харах

Fix segfault on unique interface name list generation (for multipath)

Joseph Henry 5 жил өмнө
parent
commit
decd5add2a

+ 6 - 2
osdep/Binder.hpp

@@ -348,10 +348,11 @@ public:
 		}
 		}
 
 
 		// Generate set of unique interface names (used for formation of logical link set in multipath code)
 		// Generate set of unique interface names (used for formation of logical link set in multipath code)
+		// TODO: Could be gated not to run if multipath is not enabled.
 		for(std::map<InetAddress,std::string>::const_iterator ii(localIfAddrs.begin());ii!=localIfAddrs.end();++ii) {
 		for(std::map<InetAddress,std::string>::const_iterator ii(localIfAddrs.begin());ii!=localIfAddrs.end();++ii) {
 			linkIfNames.insert(ii->second);
 			linkIfNames.insert(ii->second);
 		}
 		}
-		for (std::set<std::string>::iterator si(linkIfNames.begin());si!=linkIfNames.end();si++) {
+		for (std::set<std::string>::iterator si(linkIfNames.begin());si!=linkIfNames.end();) {
 			bool bFoundMatch = false;
 			bool bFoundMatch = false;
 			for(std::map<InetAddress,std::string>::const_iterator ii(localIfAddrs.begin());ii!=localIfAddrs.end();++ii) {
 			for(std::map<InetAddress,std::string>::const_iterator ii(localIfAddrs.begin());ii!=localIfAddrs.end();++ii) {
 				if (ii->second == *si) {
 				if (ii->second == *si) {
@@ -360,7 +361,10 @@ public:
 				}
 				}
 			}
 			}
 			if (!bFoundMatch) {
 			if (!bFoundMatch) {
-				linkIfNames.erase(si);
+				linkIfNames.erase(si++);
+			}
+			else {
+				++si;
 			}
 			}
 		}
 		}