Fixed pattern parser SEGV on broken pattern files.
authorMichael Andres <ma@suse.de>
Thu, 27 Sep 2007 15:17:38 +0000 (15:17 +0000)
committerMichael Andres <ma@suse.de>
Thu, 27 Sep 2007 15:17:38 +0000 (15:17 +0000)
package/libzypp.changes
zypp/parser/susetags/PatternFileReader.cc

index 15f73474588a9a611071f455ee8851e99a5acc6b..7f1525b3ac8be4d84f4db9a2f71619415e1c45e7 100644 (file)
@@ -1,11 +1,17 @@
+-------------------------------------------------------------------
+Thu Sep 27 17:13:14 CEST 2007 - ma@suse.de
+
+- Fixed pattern parser SEGV on broken pattern files. (#328546)
+- revision 7402
+
 -------------------------------------------------------------------
 Wed Sep 26 11:08:14 CEST 2007 - schubi@suse.de
 
-- QueuItemRequire: Filter out all provider which have worser architecture, 
+- QueuItemRequire: Filter out all provider which have worser architecture,
   are NOT noarch and have not the same name as the requirement. The
   last one is needed for updating packages via patch/atoms.
   Bug 328081
-- Revert changes of r 7340 
+- Revert changes of r 7340
 - r 7386
 
 -------------------------------------------------------------------
index 491a57ee8d1ccc137a4b5dbc718cec4a5daf7041..0fc57fefd056c40098665f7218caa468a1790492 100644 (file)
@@ -287,14 +287,25 @@ namespace zypp
          // start new data
          _pimpl->consumePat( tag_r );
        }
-       else if TAGFWD( Sum );
-       else if TAGFWD( Vis );
-       else if TAGFWD( Cat );
-       else if TAGFWD( Ico );
-       else if TAGFWD( Ord );
-       else if TAGFWD( Ver );
-       else
-       { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
+        else
+        {
+          if ( _pimpl->hasData() )
+          {
+            if TAGFWD( Sum );
+            else if TAGFWD( Vis );
+            else if TAGFWD( Cat );
+            else if TAGFWD( Ico );
+            else if TAGFWD( Ord );
+            else
+            { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
+          }
+          else
+          {
+            if TAGFWD( Ver );
+            else
+            { WAR << errPrefix( tag_r, "Unknown header tag" ) << endl; }
+          }
+        }
       }
 
       ///////////////////////////////////////////////////////////////////
@@ -304,31 +315,36 @@ namespace zypp
       //
       void PatternFileReader::consume( const MultiTagPtr & tag_r )
       {
-       if TAGFWD( Req );
-       else if TAGFWD( Prq );
-       else if TAGFWD( Prv );
-       else if TAGFWD( Con );
-       else if TAGFWD( Obs );
-       else if TAGFWD( Rec );
-       else if TAGFWD( Fre );
-       else if TAGFWD( Enh );
-       else if TAGFWD( Sug );
-       else if TAGFWD( Sup );
-       // package related dependencies
-       else if TAGFWD( Prq ); // requires
-       else if TAGFWD( Pcn ); // conflicts
-       else if TAGFWD( Pob ); // obsoletes
-       else if TAGFWD( Prc ); // recommends
-       else if TAGFWD( Pfr ); // freshens
-       else if TAGFWD( Pen ); // enhances
-       else if TAGFWD( Psg ); // suggests
-       else if TAGFWD( Psp ); // supplements
-       //
-       else if TAGFWD( Des );
-       else if TAGFWD( Inc ); // UI hint: includes
-       else if TAGFWD( Ext ); // UI hint: extends
-       else
-       { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
+        if ( _pimpl->hasData() )
+        {
+          if TAGFWD( Req );
+          else if TAGFWD( Prq );
+          else if TAGFWD( Prv );
+          else if TAGFWD( Con );
+          else if TAGFWD( Obs );
+          else if TAGFWD( Rec );
+          else if TAGFWD( Fre );
+          else if TAGFWD( Enh );
+          else if TAGFWD( Sug );
+          else if TAGFWD( Sup );
+         // package related dependencies
+          else if TAGFWD( Prq ); // requires
+          else if TAGFWD( Pcn ); // conflicts
+          else if TAGFWD( Pob ); // obsoletes
+          else if TAGFWD( Prc ); // recommends
+          else if TAGFWD( Pfr ); // freshens
+          else if TAGFWD( Pen ); // enhances
+          else if TAGFWD( Psg ); // suggests
+          else if TAGFWD( Psp ); // supplements
+          //
+          else if TAGFWD( Des );
+          else if TAGFWD( Inc ); // UI hint: includes
+          else if TAGFWD( Ext ); // UI hint: extends
+          else
+          { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
+        }
+        else
+        { WAR << errPrefix( tag_r, "Unknown header tag" ) << endl; }
       }
 
       ///////////////////////////////////////////////////////////////////