helpcompiler/source/HelpCompiler.cxx |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

New commits:
commit 98db90e2ccd7cefaa5094c2d1d2af8cb10b4a867
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Wed Jun 13 10:21:21 2018 +0200

    Don't create std::string from nullptr
    
    ...which violates the ctor's preconditions, so is UB.  Also, the "XML Help
    Document Type Definition" appendix of
    <http://documentation.openoffice.org/online_help/OOo2HelpAuthoring.pdf> 
states
    that "branch" and "id" attributes are #REQUIRED for the "bookmark" element.
    
    (There's probably further cases in the surrounding code where a std::string 
is
    created from a potentially null argument, which would benefit from similar
    fixes.)
    
    Change-Id: I414576d13de784de1290951bcdd5e3ecb51f9cb8
    Reviewed-on: https://gerrit.libreoffice.org/55735
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/helpcompiler/source/HelpCompiler.cxx 
b/helpcompiler/source/HelpCompiler.cxx
index 1013c8d8e81a..8cfdcecfa539 100644
--- a/helpcompiler/source/HelpCompiler.cxx
+++ b/helpcompiler/source/HelpCompiler.cxx
@@ -325,10 +325,18 @@ void myparser::traverse( xmlNodePtr parentNode )
         else if (!strcmp(reinterpret_cast<const char*>(test->name), 
"bookmark"))
         {
             xmlChar *branchxml = xmlGetProp(test, reinterpret_cast<const 
xmlChar*>("branch"));
-            xmlChar *idxml = xmlGetProp(test, reinterpret_cast<const 
xmlChar*>("id"));
+            if (branchxml == nullptr) {
+                throw HelpProcessingException(
+                    HelpProcessingErrorClass::XmlParsing, "bookmark lacks 
branch attribute");
+            }
             std::string branch(reinterpret_cast<char*>(branchxml));
-            std::string anchor(reinterpret_cast<char*>(idxml));
             xmlFree (branchxml);
+            xmlChar *idxml = xmlGetProp(test, reinterpret_cast<const 
xmlChar*>("id"));
+            if (idxml == nullptr) {
+                throw HelpProcessingException(
+                    HelpProcessingErrorClass::XmlParsing, "bookmark lacks id 
attribute");
+            }
+            std::string anchor(reinterpret_cast<char*>(idxml));
             xmlFree (idxml);
 
             if (branch.compare(0, 3, "hid") == 0)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to