[LyX/master] Prevent wrong reference to duplicated (but deleted) label

Juergen Spitzmueller spitz at lyx.org
Sun Mar 29 15:28:23 UTC 2020


commit 1e34871d3865c711b2005be429d9290c5e7223ef
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Sun Mar 29 17:47:59 2020 +0200

    Prevent wrong reference to duplicated (but deleted) label
    
    Fixes #11803
---
 src/insets/InsetLabel.cpp |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/insets/InsetLabel.cpp b/src/insets/InsetLabel.cpp
index d8009ad..30211b8 100644
--- a/src/insets/InsetLabel.cpp
+++ b/src/insets/InsetLabel.cpp
@@ -316,6 +316,20 @@ void InsetLabel::latex(otexstream & os, OutputParams const & runparams_in) const
 {
 	OutputParams runparams = runparams_in;
 	docstring command = getCommand(runparams);
+	docstring const label = getParam("name");
+	if (buffer().params().output_changes
+	    && buffer().activeLabel(label)
+	    && buffer().insetLabel(label, true) != this) {
+		// this is a deleted label and we have a non-deleted with the same id
+		// rename it for output to prevent wrong references
+		docstring newlabel = label;
+		int i = 1;
+		while (buffer().insetLabel(newlabel)) {
+			newlabel = label + "-DELETED-" + convert<docstring>(i);
+			++i;
+		}
+		command = subst(command, label, newlabel);
+	}
 	// In macros with moving arguments, such as \section,
 	// we store the label and output it after the macro (#2154)
 	if (runparams_in.postpone_fragile_stuff)


More information about the lyx-cvs mailing list