From 63383fddf110e11385f48b97af8a7dc75d4f3ff4 Mon Sep 17 00:00:00 2001
From: torque <torque@1>
Date: Sun, 24 Aug 2014 12:06:22 -0700
Subject: [PATCH] Perform extradata deduplication on add.

Checks all existing extradata keys and values to ensure that the set
that is being added doesn't already exist.
---
 src/ass_file.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/ass_file.cpp b/src/ass_file.cpp
index 21aa23eaa..bd605d9bc 100644
--- a/src/ass_file.cpp
+++ b/src/ass_file.cpp
@@ -229,8 +229,13 @@ void AssFile::Sort(EntryList<AssDialogue> &lst, CompFunc comp, std::set<AssDialo
 	}
 }
 
-
 uint32_t AssFile::AddExtradata(std::string const& key, std::string const& value) {
+	for (auto const& data : Extradata) {
+		// perform brute-force deduplication by simple key and value comparison
+		if (key == data.second.first && value == data.second.second) {
+			return data.first;
+		}
+	}
 	// next_extradata_id must not exist
 	assert(Extradata.find(next_extradata_id) == Extradata.end());
 	Extradata[next_extradata_id] = {key, value};
-- 
GitLab