Identify unsafe combinations of Bcc and encryption
[gnus] / lisp / nndoc.el
index 5d946f5..cca3418 100644 (file)
@@ -1,7 +1,6 @@
 ;;; nndoc.el --- single file access for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -57,6 +56,10 @@ from the document.")
   `((mmdf
      (article-begin .  "^\^A\^A\^A\^A\n")
      (body-end .  "^\^A\^A\^A\^A\n"))
+    (debbugs-db
+     (file-begin    . "^\005")
+     (article-begin . "^[\005\007]\n")
+     (body-end      . "^\003"))
     (mime-digest
      (article-begin . "")
      (head-begin . "^ ?\n")
@@ -196,7 +199,7 @@ from the document.")
 ;; lines in the body.  For MIME dissections only, ARTICLE-INSERT [5] and
 ;; SUMMARY-INSERT [6] give headers to insert for full article or summary line
 ;; generation, respectively.  Other headers usually follow directly from the
-;; buffer.  Value `nil' means no insert.
+;; buffer.  Value nil means no insert.
 (defvoo nndoc-dissection-alist nil)
 (defvoo nndoc-prepare-body-function nil)
 (defvoo nndoc-generate-head-function nil)
@@ -232,19 +235,22 @@ from the document.")
          (while articles
            (when (setq entry (cdr (assq (setq article (pop articles))
                                         nndoc-dissection-alist)))
-             (insert (format "221 %d Article retrieved.\n" article))
-             (if nndoc-generate-head-function
-                 (funcall nndoc-generate-head-function article)
-               (insert-buffer-substring
-                nndoc-current-buffer (car entry) (nth 1 entry)))
-             (goto-char (point-max))
-             (unless (eq (char-after (1- (point))) ?\n)
-               (insert "\n"))
-             (insert (format "Lines: %d\n" (nth 4 entry)))
-             (insert ".\n")))
-
-         (when nndoc-header-transform-function
-           (funcall nndoc-header-transform-function))
+             (let ((start (point)))
+               (insert (format "221 %d Article retrieved.\n" article))
+               (if nndoc-generate-head-function
+                   (funcall nndoc-generate-head-function article)
+                 (insert-buffer-substring
+                  nndoc-current-buffer (car entry) (nth 1 entry)))
+               (goto-char (point-max))
+               (unless (eq (char-after (1- (point))) ?\n)
+                 (insert "\n"))
+               (insert (format "Lines: %d\n" (nth 4 entry)))
+               (insert ".\n")
+               (when nndoc-header-transform-function
+                 (save-excursion
+                   (save-restriction
+                     (narrow-to-region start (point))
+                     (funcall nndoc-header-transform-function entry)))))))
          (nnheader-fold-continuation-lines)
          'headers)))))
 
@@ -458,6 +464,10 @@ from the document.")
   (when (looking-at "\^A\^A\^A\^A$")
     t))
 
+(defun nndoc-debbugs-db-type-p ()
+  (when (looking-at "\006$")
+    t))
+
 (defun nndoc-news-type-p ()
   (when (looking-at "^Path:.*\n")
     t))
@@ -671,10 +681,19 @@ from the document.")
   (when (re-search-forward "^Author: " nil t)
     (replace-match "From: " t t)))
 
-(defun nndoc-transform-git-headers ()
+(defun nndoc-transform-git-headers (entry)
   (goto-char (point-min))
-  (while (re-search-forward "^Author: " nil t)
-    (replace-match "From: " t t)))
+  (when (re-search-forward "^Author: " nil t)
+    (replace-match "From: " t t))
+  (let (subject)
+    (with-current-buffer nndoc-current-buffer
+      (goto-char (car entry))
+      (when (search-forward "\n\n" nil t)
+       (setq subject (buffer-substring (point) (line-end-position)))))
+    (when subject
+      (goto-char (point-min))
+      (forward-line 1)
+      (insert (format "Subject: %s\n" subject)))))
 
 (defun nndoc-lanl-gov-announce-type-p ()
   (when (let ((case-fold-search nil))
@@ -723,7 +742,7 @@ from the document.")
                                   nil t)
            (setq subject (concat (match-string 1) subject))
            (setq from (concat (match-string 2) " " from))))))
-    (while (and from (string-match "(\[^)\]*)" from))
+    (while (and from (string-match "([^)]*)" from))
       (setq from (replace-match "" t t from)))
     (insert "From: "  (or from "unknown")
            "\nSubject: " (or subject "(no subject)") "\n")
@@ -906,7 +925,8 @@ from the document.")
            (setq body-end (point))
            (push (list (incf i) head-begin head-end body-begin body-end
                        (count-lines body-begin body-end))
-                 nndoc-dissection-alist)))))))
+                 nndoc-dissection-alist)))))
+    (setq nndoc-dissection-alist (nreverse nndoc-dissection-alist))))
 
 (defun nndoc-article-begin ()
   (if nndoc-article-begin-function