]> git.saurik.com Git - apt.git/commitdiff
rework some code to fix some scan-build warnings
authorDavid Kalnischkies <david@kalnischkies.de>
Thu, 16 Jan 2014 18:51:23 +0000 (19:51 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Thu, 16 Jan 2014 18:51:23 +0000 (19:51 +0100)
No visible functional changes, just code moved around and additional
checks to eliminate impossible branches

Reported-By: scan-build
Git-Dch: Ignore

apt-pkg/aptconfiguration.cc
apt-pkg/cacheset.cc
apt-pkg/contrib/gpgv.cc
apt-pkg/contrib/mmap.cc
ftparchive/contents.cc
ftparchive/override.cc
test/libapt/parsedepends_test.cc

index 115d116168a5e7986c341e402e603c5aac230ae1..1ebcf97bc5821408372c66ffc634d2d97e1c7200 100644 (file)
@@ -141,7 +141,7 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
        // so they will be all included in the Cache.
        std::vector<string> builtin;
        DIR *D = opendir(_config->FindDir("Dir::State::lists").c_str());
-       if (D != 0) {
+       if (D != NULL) {
                builtin.push_back("none");
                for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D)) {
                        string const name = SubstVar(Ent->d_name, "%5f", "_");
@@ -166,8 +166,8 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
                                continue;
                        builtin.push_back(c);
                }
+               closedir(D);
        }
-       closedir(D);
 
        // FIXME: Remove support for the old APT::Acquire::Translation
        // it was undocumented and so it should be not very widthly used
index 0147f7e8662845656c48d90ddd110c8cc0b36ae6..29281aab93569636a66cfb9d77f3e2058544cc1f 100644 (file)
@@ -73,6 +73,8 @@ bool PackageContainerInterface::FromTask(PackageContainerInterface * const pci,
                const char *start, *end;
                parser.GetRec(start,end);
                unsigned int const length = end - start;
+               if (unlikely(length == 0))
+                  continue;
                char buf[length];
                strncpy(buf, start, length);
                buf[length-1] = '\0';
index f57a72d8640fe099c451357eb39ba52aaaaf7327..0a469dd7a9cbb692da0fb2d47ee3d2d8ca684f0b 100644 (file)
@@ -103,12 +103,12 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
       }
    }
 
+   enum  { DETACHED, CLEARSIGNED } releaseSignature = (FileGPG != File) ? DETACHED : CLEARSIGNED;
    std::vector<std::string> dataHeader;
    char * sig = NULL;
    char * data = NULL;
 
-   // file with detached signature
-   if (FileGPG != File)
+   if (releaseSignature == DETACHED)
    {
       Args.push_back(FileGPG.c_str());
       Args.push_back(File.c_str());
@@ -181,7 +181,7 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
       putenv((char *)"LC_MESSAGES=");
    }
 
-   if (FileGPG != File)
+   if (releaseSignature == DETACHED)
    {
       execvp(gpgvpath.c_str(), (char **) &Args[0]);
       ioprintf(std::cerr, "Couldn't execute %s to check %s", Args[0], File.c_str());
index a176da6368fcb97562968775305c173b30c13c85..51e8eb30f249e40878d0d743283cfe644b38a4de 100644 (file)
@@ -352,6 +352,12 @@ unsigned long DynamicMMap::RawAllocate(unsigned long long Size,unsigned long Aln
    size in the file. */
 unsigned long DynamicMMap::Allocate(unsigned long ItemSize)
 {
+   if (unlikely(ItemSize == 0))
+   {
+      _error->Fatal("Can't allocate an item of size zero");
+      return 0;
+   }
+
    // Look for a matching pool entry
    Pool *I;
    Pool *Empty = 0;
@@ -412,7 +418,7 @@ unsigned long DynamicMMap::WriteString(const char *String,
 
    unsigned long const Result = RawAllocate(Len+1,0);
 
-   if (Result == 0 && _error->PendingError())
+   if (Base == NULL || (Result == 0 && _error->PendingError()))
       return 0;
 
    memcpy((char *)Base + Result,String,Len);
index 015c790e074a351440490262ace1a7d32751c80b..80fe6e17e6ac99d995e42731018208fb41334767 100644 (file)
@@ -233,7 +233,7 @@ void GenContents::Add(const char *Dir,const char *Package)
    
    // The final component if it does not have a trailing /
    if (I - Start >= 1)
-      Root = Grab(Root,Start,Package);
+      Grab(Root,Start,Package);
 }
                                                                        /*}}}*/
 // GenContents::WriteSpace - Write a given number of white space chars /*{{{*/
index 1288ff133483c83fb9289520649bb26a12e6aa55..d2130db8a22ffed433d41ea71fbdb201228268a5 100644 (file)
@@ -52,45 +52,41 @@ bool Override::ReadOverride(string const &File,bool const &Source)
       if (*Pkg == 0)
         continue;
 
+#define APT_FIND_NEXT_FIELD \
+      for (End++; isspace(*End) != 0 && *End != 0; ++End) \
+        /* skip spaces */ ; \
+      Start = End; \
+      for (; isspace(*End) == 0 && *End != 0; ++End) \
+        /* find end of word */ ;
+
+#define APT_WARNING_MALFORMED_LINE(FIELD) \
+      if (*End == 0) \
+      { \
+        _error->Warning(_("Malformed override %s line %llu (%s)"),File.c_str(), \
+                        Counter, FIELD ); \
+        continue; \
+      } \
+      *End = 0;
+
       // Find the package and zero..
-      char *Start = Pkg;
+      char *Start;
       char *End = Pkg;
       for (; isspace(*End) == 0 && *End != 0; End++);
-      if (*End == 0)
-      {
-        _error->Warning(_("Malformed override %s line %llu #1"),File.c_str(),
-                        Counter);
-        continue;
-      }      
-      *End = 0;
+      APT_WARNING_MALFORMED_LINE("pkgname");
+
+      APT_FIND_NEXT_FIELD;
 
       // Find the priority
       if (Source == false)
       {
-        for (End++; isspace(*End) != 0 && *End != 0; End++);
-        Start = End;
-        for (; isspace(*End) == 0 && *End != 0; End++);
-        if (*End == 0)
-        {
-           _error->Warning(_("Malformed override %s line %llu #2"),File.c_str(),
-                           Counter);
-           continue;
-        }
-        *End = 0;
+        APT_WARNING_MALFORMED_LINE("priority");
         Itm.Priority = Start;
+
+        APT_FIND_NEXT_FIELD;
       }
-      
+
       // Find the Section
-      for (End++; isspace(*End) != 0 && *End != 0; End++);
-      Start = End;
-      for (; isspace(*End) == 0 && *End != 0; End++);
-      if (*End == 0)
-      {
-        _error->Warning(_("Malformed override %s line %llu #3"),File.c_str(),
-                        Counter);
-        continue;
-      }      
-      *End = 0;
+      APT_WARNING_MALFORMED_LINE("section");
       Itm.FieldOverride["Section"] = Start;
 
       // Source override files only have the two columns
@@ -99,7 +95,7 @@ bool Override::ReadOverride(string const &File,bool const &Source)
         Mapping[Pkg] = Itm;
         continue;
       }
-      
+
       // Find the =>
       for (End++; isspace(*End) != 0 && *End != 0; End++);
       if (*End != 0)
index 677b1c89263756221358a96fd1169610db0558ed..e95016240cabd24c71dfe2cc876c413e03bd615e 100644 (file)
@@ -176,7 +176,7 @@ test:
        equals("7.15.3~", Version);
        equals(Null | pkgCache::Dep::Equals | pkgCache::Dep::Or, Op);
 
-       Start = debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
+       debListParser::ParseDepends(Start, End, Package, Version, Op, ParseArchFlags, StripMultiArch);
        if (StripMultiArch == true)
                equals("overlord-dev", Package);
        else