From 8cbeb084c4f426ac6177070d07b90f4a3af8c0e6 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 22 Feb 2021 21:15:03 +0100 Subject: [PATCH 1/2] Don't use invalid iterators in Doxygen command parsing code Check that the string is non-empty before dereferencing its begin() iterator and avoid calling addDoxyCommand() with an empty string in the first place. --- Source/Doxygen/doxyparser.cxx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/Doxygen/doxyparser.cxx b/Source/Doxygen/doxyparser.cxx index 35d18363f..d5a0a15eb 100644 --- a/Source/Doxygen/doxyparser.cxx +++ b/Source/Doxygen/doxyparser.cxx @@ -1081,6 +1081,13 @@ bool DoxygenParser::addDoxyCommand(DoxygenParser::TokenList &tokList, const std: tokList.push_back(Token(COMMAND, cmd)); return true; } else { + if (cmd.empty()) { + // This actually indicates a bug in the code in this file, as this + // function shouldn't be called at all in this case. + printListError(WARN_DOXYGEN_UNKNOWN_COMMAND, "Unexpected empty Doxygen command."); + return false; + } + // This function is called for the special Doxygen commands, but also for // HTML commands (or anything that looks like them, actually) and entities. // We don't recognize all of those, so just ignore them and pass them @@ -1181,6 +1188,11 @@ void DoxygenParser::processWordCommands(size_t &pos, const std::string &line) { size_t endOfWordPos = getEndOfWordCommand(line, pos); string cmd = line.substr(pos, endOfWordPos - pos); + if (cmd.empty()) { + // This was a bare backslash, just ignore it. + return; + } + addDoxyCommand(m_tokenList, cmd); // A flag for whether we want to skip leading spaces after the command From 69f9509c2bb973071a97af3cb21fda2866848cd0 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Mon, 1 Mar 2021 22:51:01 +0000 Subject: [PATCH 2/2] Fix incorrect warning "Unknown Doxygen command: ." --- CHANGES.current | 3 +++ Examples/test-suite/doxygen_parsing.i | 1 + Examples/test-suite/java/doxygen_parsing_runme.java | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/CHANGES.current b/CHANGES.current index dafe7077b..7e99c7490 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ Version 4.1.0 (in progress) =========================== +2021-03-01: vadz + #1952 Fix incorrect warning "Unknown Doxygen command: ." + 2020-10-10: wsfulton #252 complex can now be used as a C identifier and doesn't give a syntax error. diff --git a/Examples/test-suite/doxygen_parsing.i b/Examples/test-suite/doxygen_parsing.i index 40f37a4c2..3a559053d 100644 --- a/Examples/test-suite/doxygen_parsing.i +++ b/Examples/test-suite/doxygen_parsing.i @@ -29,6 +29,7 @@ enum SomeEnum */ struct SomeStruct { + int width; ///< \**immutable** image width in pixels }; /** diff --git a/Examples/test-suite/java/doxygen_parsing_runme.java b/Examples/test-suite/java/doxygen_parsing_runme.java index 10d65fca8..29e524f78 100644 --- a/Examples/test-suite/java/doxygen_parsing_runme.java +++ b/Examples/test-suite/java/doxygen_parsing_runme.java @@ -45,6 +45,12 @@ public class doxygen_parsing_runme { " The struct comment \n" + " \n" + ""); + wantedComments.put("doxygen_parsing.SomeStruct.setWidth(int)", + "**immutable** image width in pixels \n" + + ""); + wantedComments.put("doxygen_parsing.SomeStruct.getWidth()", + "**immutable** image width in pixels \n" + + ""); wantedComments.put("doxygen_parsing.doxygen_parsing.setSomeVar(int)", " The var comment \n" + " \n" +