- some error handling + sanity checks for repomd parsing
authorpmatilai <pmatilai>
Fri, 7 Apr 2006 16:43:08 +0000 (16:43 +0000)
committerpmatilai <pmatilai>
Fri, 7 Apr 2006 16:43:08 +0000 (16:43 +0000)
- clean up debugging junk

apt-pkg/rpm/rpmhandler.cc
apt-pkg/rpm/rpmindexfile.cc
apt-pkg/rpm/rpmlistparser.cc

index 77a65cb..d6dfc2c 100644 (file)
@@ -904,71 +904,80 @@ void RPMDBHandler::Rewind()
 
 RPMRepomdHandler::RPMRepomdHandler(string File, bool useFilelist)
 {
-   //cout << "Repomd handler constr. " << File << endl;
    WithFilelist = useFilelist;
    PrimaryFile = File;
    FilelistFile = File.substr(0, File.size() - 11) + "filelists.xml";
 
    ID = File;
    Root = NULL;
+   Primary = NULL;
+   Filelist = NULL;
+   xmlChar *packages = NULL;
+   unsigned int pkgcount = 0;
+   
 
    Primary = xmlReadFile(File.c_str(), NULL, XML_PARSE_NONET|XML_PARSE_NOBLANKS);
    if ((Root = xmlDocGetRootElement(Primary)) == NULL) {
-      xmlFreeDoc(Primary);
-      cout << "getting root element failed" << endl;
+      _error->Error(_("Failed to open package index %s"), PrimaryFile.c_str());
+      goto error;
    }
+   if (xmlStrncmp(Root->name, (xmlChar*)"metadata", strlen("metadata")) != 0) {
+      _error->Error(_("Corrupted package index %s"), PrimaryFile.c_str());
+      goto error;
+   }
+
    if (WithFilelist && FileExists(FilelistFile)) {
       Filelist = xmlReaderForFile(FilelistFile.c_str(), NULL,
                                   XML_PARSE_NONET|XML_PARSE_NOBLANKS);
       if (Filelist == NULL) {
         xmlFreeTextReader(Filelist);
-        cout << "opening filelist failed" << endl;
-        WithFilelist = false;
+        _error->Error(_("Failed to open filelist index %s"), FilelistFile.c_str());
+        goto error;
       } 
       // XXX FIXME: Ugh.. "initialize" filelist to correct position
       xmlTextReaderRead(Filelist);
       xmlTextReaderRead(Filelist);
    }    
 
-   xmlChar *prop = xmlGetProp(Root, (xmlChar*)"packages");
-   iSize = atoi((char*)prop);
-   xmlFree(prop);
-   unsigned int cnt = 0;
+   packages = xmlGetProp(Root, (xmlChar*)"packages");
+   iSize = atoi((char*)packages);
+   xmlFree(packages);
    for (xmlNode *n = Root->children; n; n = n->next) {
       if (n->type != XML_ELEMENT_NODE ||
           xmlStrcmp(n->name, (xmlChar*)"package") != 0)
          continue;
       Pkgs.push_back(n);
-      cnt++;
+      pkgcount++;
    }
-   if (cnt != iSize) {
-      cout << "error, found " << cnt << " packages, should be " << iSize << endl;
-   }
-
    NodeP = Pkgs[0];
 
-   if (NodeP == NULL)
-      cout << "NodeP is null, ugh..." << endl;
+   return;
+
+error:
+   if (Primary) {
+      xmlFreeDoc(Primary);
+   }
+   if (Filelist) {
+      xmlFreeTextReader(Filelist);
+   }
 }
 
 bool RPMRepomdHandler::Skip()
 {
    if (iOffset >= iSize-1) {
-      //cout << "skip over end " << iOffset << " " << iSize << endl;
       return false;
    }
    iOffset++;
    NodeP = Pkgs[iOffset];
-   if (WithFilelist)
+   if (WithFilelist) {
       xmlTextReaderNext(Filelist);
+   }
    return true;
 }
 
 bool RPMRepomdHandler::Jump(unsigned int Offset)
 {
-   //cout << "jump " << iOffset << " offset " << Offset << endl;
    if (Offset > iSize-1) {
-      //cout << "jump over end " << iOffset << " " << iSize << endl;
       return false;
    }
    iOffset = Offset;
@@ -1332,7 +1341,6 @@ unsigned short RPMRepomdHandler::VersionHash()
    unsigned long Result = INIT_FCS;
    string nevra = Name() + Version() + Arch();
    Result = AddCRC16(Result, nevra.c_str(), nevra.length());
-   //cout << "versionhash: " << Result << endl;
    return Result;
 }
 
index edc026d..ce77a86 100644 (file)
@@ -538,11 +538,7 @@ string rpmRepomdIndex::ArchiveURI(string File) const
 {
    string Res;
 
-   //cout << Dist << File << endl;
-
    Res += URI + '/' + Dist + '/' + File;
-   //cout << "repomd archiveuri " << " " << Res << endl;
-
    return Res;
 }
 
@@ -587,9 +583,6 @@ string rpmRepomdIndex::ReleaseURI(string Type) const
 {
    string Res;
    Res = URI + Dist + "/repodata/" + "repomd.xml";
-
-   //cout << "XXXXX repomd releaseuri " << Res << endl;
-   
    return Res;
 }
 
@@ -605,7 +598,6 @@ string rpmRepomdIndex::ReleaseInfo(string Type) const
       Info += Dist;   
    Info += " ";
    Info += Type;
-   //cout << "repomd releaseinfo " << Info << endl;
    return Info;
 };
 
@@ -621,7 +613,6 @@ string rpmRepomdIndex::Info(string Type) const
       Info += Dist + '/' ;   
    Info += " ";
    Info += Type;
-   //cout << "repomd info " << Info << endl;
    return Info;
 }
 
@@ -703,7 +694,6 @@ unsigned long rpmRepomdIndex::Size() const
 
 bool rpmRepomdIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
 {
-   //cout << "repomd MERGE" << endl;
    string PackageFile = IndexPath();
    RPMHandler *Handler = CreateHandler();
 
@@ -717,7 +707,6 @@ bool rpmRepomdIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
 
    // Store the IMS information
    pkgCache::PkgFileIterator File = Gen.GetCurFile();
-   //cout << "merge pkgfile " << PackageFile << endl;
    struct stat St;
    if (stat(PackageFile.c_str(),&St) != 0) 
    {
index 2f230bd..6b0634e 100644 (file)
@@ -290,7 +290,6 @@ bool rpmListParser::ParseDepends(pkgCache::VerIterator Ver,
    for (vector<Dependency*>::iterator I = Deps.begin(); I != Deps.end(); I++) {
       if (NewDepends(Ver,(*I)->Name,(*I)->Version,
                    (*I)->Op,(*I)->Type) == false) {
-        cout << "failed adding dep!" << endl; 
         return false;
       }
    }
@@ -362,7 +361,6 @@ bool rpmListParser::ParseProvides(pkgCache::VerIterator Ver)
    }
    for (vector<Dependency*>::iterator I = Provs.begin(); I != Provs.end(); I++) {
       if (NewProvides(Ver,(*I)->Name,(*I)->Version) == false) {
-        cout << "failed adding provide!" << endl; 
         return false;
       }
    }
@@ -539,7 +537,6 @@ bool rpmRepomdParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI,
    xmlDocPtr RepoMD = NULL;
    xmlNode *Root = NULL;
 
-   //cout << "Load repomd release " << endl;
    RepoMD = xmlReadFile(File.c_str(), NULL, XML_PARSE_NONET);
    if ((Root = xmlDocGetRootElement(RepoMD)) == NULL) {
       xmlFreeDoc(RepoMD);
@@ -554,18 +551,15 @@ bool rpmRepomdParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI,
            xmlNode *loc = FindNode(n, "location");
            if (loc) {
               Primary = (char*)xmlGetProp(loc, (xmlChar*)"href");
-             //cout << "found primary " << Primary << endl;
            }
        } else if (type == "filelists") {
            xmlNode *loc = FindNode(n, "location");
            if (loc) {
               Filelist = (char*)xmlGetProp(loc, (xmlChar*)"href");
-              //cout << "found filelist " << Filelist << endl;
            }
         }
       }
 
-      //cout << "XXXX " << n->name << endl;
    }
 
    xmlFreeDoc(RepoMD);