]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/gpgv.cc
add check when sources.list changed
[apt.git] / apt-pkg / contrib / gpgv.cc
index 54cc4c6d0cd435dfa2822efbe2068401515c1a28..f47e7ea4868f1334b7c7a5b7cbc1a5c41af690f2 100644 (file)
@@ -154,7 +154,7 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
         if (sigFd != -1)
            unlink(data);
         ioprintf(std::cerr, "Splitting up %s into data and signature failed", File.c_str());
-        exit(EINTERNAL);
+        exit(112);
       }
       Args.push_back(sig);
       Args.push_back(data);
@@ -298,20 +298,21 @@ bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile,
               SignatureFile->Write("\n", 1);
            }
         }
-        else if (found_message_end == false)
+        else if (found_message_end == false) // we are in the message block
         {
-           // we are in the message block
+           // we don't have any fields which need dash-escaped,
+           // but implementations are free to encode all lines …
+           char const * dashfree = buf;
+           if (strncmp(dashfree, "- ", 2) == 0)
+              dashfree += 2;
            if(first_line == true) // first line does not need a newline
-           {
-              if (ContentFile != NULL)
-                 ContentFile->Write(buf, strlen(buf));
               first_line = false;
-           }
            else if (ContentFile != NULL)
-           {
               ContentFile->Write("\n", 1);
-              ContentFile->Write(buf, strlen(buf));
-           }
+           else
+              continue;
+           if (ContentFile != NULL)
+              ContentFile->Write(dashfree, strlen(dashfree));
         }
       }
       else if (found_signature == true)
@@ -333,11 +334,11 @@ bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile,
 
    // if we haven't found any of them, this an unsigned file,
    // so don't generate an error, but splitting was unsuccessful none-the-less
-   if (found_message_start == false && found_message_end == false)
+   if (first_line == true && found_message_start == false && found_message_end == false)
       return false;
    // otherwise one missing indicates a syntax error
-   else if (found_message_start == false || found_message_end == false)
-      return _error->Error("Splitting of file %s failed as it doesn't contain all expected parts", InFile.c_str());
+   else if (first_line == true || found_message_start == false || found_message_end == false)
+     return _error->Error("Splitting of file %s failed as it doesn't contain all expected parts %i %i %i", InFile.c_str(), first_line, found_message_start, found_message_end);
 
    return true;
 }