浏览代码

Fix potential crash due to iterator invalidation

Ivan Savenko 2 年之前
父节点
当前提交
7c410ab5ce
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      lib/CModHandler.cpp

+ 7 - 3
lib/CModHandler.cpp

@@ -311,10 +311,14 @@ void CIdentifierStorage::finalize()
 	state = FINALIZING;
 	bool errorsFound = false;
 
-	//Note: we may receive new requests during resolution phase -> end may change -> range for can't be used
-	for(auto it = scheduledRequests.begin(); it != scheduledRequests.end(); it++)
+	while ( !scheduledRequests.empty() )
 	{
-		errorsFound |= !resolveIdentifier(*it);
+		// Use local copy since new requests may appear during resolving, invalidating any iterators
+		auto request = scheduledRequests.back();
+		scheduledRequests.pop_back();
+
+		if (!resolveIdentifier(request))
+			errorsFound = true;
 	}
 
 	if (errorsFound)