From f238e09990a9aad72684d00248d7e961f036a0e5 Mon Sep 17 00:00:00 2001 From: Roberto Fernandez Bautista Date: Thu, 22 Feb 2024 21:36:03 +0100 Subject: [PATCH] Legacy libraries: De-duplicate field names on load Fixes https://gitlab.com/kicad/code/kicad/-/issues/16902 --- .../legacy/sch_legacy_lib_plugin_cache.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/eeschema/sch_plugins/legacy/sch_legacy_lib_plugin_cache.cpp b/eeschema/sch_plugins/legacy/sch_legacy_lib_plugin_cache.cpp index ff9f2d994d..9c1de8bc56 100644 --- a/eeschema/sch_plugins/legacy/sch_legacy_lib_plugin_cache.cpp +++ b/eeschema/sch_plugins/legacy/sch_legacy_lib_plugin_cache.cpp @@ -669,7 +669,20 @@ void SCH_LEGACY_PLUGIN_CACHE::loadField( std::unique_ptr& aSymbol, } else { - parseQuotedString( field->m_name, aReader, line, &line, true ); // Optional. + wxString fieldName = wxEmptyString; + parseQuotedString( fieldName, aReader, line, &line, true ); // Optional. + + if( fieldName.IsEmpty() ) + return; + + wxString candidateFieldName = fieldName; + int suffix = 0; + + //Deduplicate field name + while( aSymbol->FindField( candidateFieldName ) != nullptr ) + candidateFieldName = wxString::Format( "%s_%d", fieldName, ++suffix ); + + field->m_name = candidateFieldName; } }