Fix missing description tags and escaping in XML output.
authorMichael Andres <ma@suse.de>
Tue, 11 Feb 2014 11:58:45 +0000 (12:58 +0100)
committerMichael Andres <ma@suse.de>
Tue, 11 Feb 2014 11:58:45 +0000 (12:58 +0100)
src/Summary.cc
src/callbacks/rpm.h
src/utils/misc.cc

index f0e2bdf..5c174f6 100644 (file)
@@ -1316,12 +1316,18 @@ void Summary::writeXmlResolvableList(ostream & out, const KindToResPairSet & res
         out << " edition-old=\"" << rold->edition() << "\"";
         out << " arch-old=\"" << rold->arch() << "\"";
       }
-      if (!res->summary().empty())
-        out << " summary=\"" << xml::escape(res->summary()) << "\"";
-      if (!res->description().empty())
-        out << ">" << endl << xml::escape(res->description()) << "</solvable>" << endl;
-      else
-        out << "/>" << endl;
+      {
+       const std::string & text( res->summary() );
+       if ( !text.empty() )
+         out << " summary=\"" << xml::escape(text) << "\"";
+      }
+      {
+       const std::string & text( res->description() );
+       if ( !text.empty())
+         out << ">\n" << "<description>" << xml::escape( text ) << "</description>" << "</solvable>" << endl;
+       else
+         out << "/>" << endl;
+      }
     }
   }
 }
index ee39bb5..d8f7bff 100644 (file)
@@ -76,14 +76,14 @@ namespace out
        ret << " edition=\""    << val_r->edition() << "\"";
        ret << " arch=\""       << val_r->arch() << "\"";
        {
-         std::string text( val_r->summary() );
+         const std::string & text( val_r->summary() );
          if ( ! text.empty() )
            ret << " summary=\"" << xml::escape( text ) << "\"";
        }
-       { // legacy: description as solvable:PCDATA instead of a subnode
-         std::string text( val_r->description() );
+       {
+         const std::string & text( val_r->description() );
          if ( ! text.empty() )
-           ret << ">\n" << xml::escape( text ) << "</solvable>";
+           ret << ">\n" << "<description>" << xml::escape( text ) << "</description>" << "</solvable>";
          else
            ret << "/>";
        }
index df25036..fac3d36 100644 (file)
@@ -353,12 +353,15 @@ string asXML(const Product & p, bool is_installed)
        " isbase=\"" << (p.isTargetDistribution() ? 1 : 0) << "\""
        " repo=\"" << xml::escape(p.repoInfo().alias()) << "\""
        " installed=\"" << (is_installed ? 1 : 0) << "\"";
-  if (p.description().empty())
-    str << "/>";
-  else
-    str
-      << ">" << endl << "<description>" << p.description() << "</description>"
-      << endl << "</product>";
+  {
+    const std::string & text( p.description() );
+    if ( text.empty() )
+      str << "/>";
+    else
+      str
+      << ">\n" << "<description>" << xml::escape( text ) << "</description>"
+       << endl << "</product>";
+  }
   return str.str();
 }
 
@@ -377,12 +380,15 @@ string asXML(const Pattern & p, bool is_installed)
        " repo=\"" << xml::escape(p.repoInfo().alias()) << "\""
        " installed=\"" << (is_installed ? 1 : 0) << "\""
        " uservisible=\"" << (p.userVisible() ? 1 : 0) << "\"";
-  if (p.description().empty())
-    str << "/>";
-  else
-    str
-      << ">" << endl << "<description>" << p.description() << "</description>"
-      << endl << "</pattern>";
+  {
+    const std::string & text( p.description() );
+    if ( text.empty() )
+      str << "/>";
+    else
+      str
+       << ">\n" << "<description>" << xml::escape( text ) << "</description>"
+       << endl << "</pattern>";
+  }
   return str.str();
 }