* gnus-util.el (gnus-split-references): accept a nil references
[gnus] / lisp / gnus-registry.el
index 5a95b20..35347ae 100644 (file)
@@ -267,20 +267,22 @@ way."
 (defun gnus-registry-trim (alist)
   "Trim alist to size, using gnus-registry-max-entries."
   (if (null gnus-registry-max-entries)
-      alist                            ; just return the alist
+      alist                             ; just return the alist
     ;; else, when given max-entries, trim the alist
-    (let ((timehash (make-hash-table                       
-                    :size 4096
-                    :test 'equal)))
+    (let* ((timehash (make-hash-table
+                     :size 4096
+                     :test 'equal))
+          (trim-length (- (length alist) gnus-registry-max-entries))
+          (trim-length (if (natnump trim-length) trim-length 0)))
       (maphash
        (lambda (key value)
-        (puthash key (gnus-registry-fetch-extra key 'mtime) timehash))
+         (puthash key (gnus-registry-fetch-extra key 'mtime) timehash))
        gnus-registry-hashtb)
 
       ;; we use the return value of this setq, which is the trimmed alist
       (setq alist
            (nthcdr
-            (- (length alist) gnus-registry-max-entries)
+            trim-length
             (sort alist 
                   (lambda (a b)
                     (time-less-p 
@@ -356,16 +358,21 @@ References or In-Reply-To header and then looks in the registry to
 see which group that message was put in.  This group is returned.
 
 See the Info node `(gnus)Fancy Mail Splitting' for more details."
-  (let ((refstr (or (message-fetch-field "references")
-                   (message-fetch-field "in-reply-to")))
+  (let* ((refstr (or (message-fetch-field "references") "")) ; guarantee string
+        (reply-to (message-fetch-field "in-reply-to"))      ; grab reply-to
+        ;; now, if reply-to is valid, append it to the References
+        (refstr (if reply-to 
+                    (concat refstr " " reply-to)
+                  refstr))
        (nnmail-split-fancy-with-parent-ignore-groups
         (if (listp nnmail-split-fancy-with-parent-ignore-groups)
             nnmail-split-fancy-with-parent-ignore-groups
           (list nnmail-split-fancy-with-parent-ignore-groups)))
        references res)
-    (if refstr
+    ;; the references string must be valid and parse to valid references
+    (if (and refstr (gnus-extract-references refstr))
        (progn
-         (setq references (nreverse (gnus-split-references refstr)))
+         (setq references (nreverse (gnus-extract-references refstr)))
          (mapcar (lambda (x)
                    (setq res (or (gnus-registry-fetch-group x) res))
                    (when (or (gnus-registry-grep-in-list
@@ -387,7 +394,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                   sender)
          (maphash
           (lambda (key value)
-            (let ((this-sender (cdr 
+            (let ((this-sender (cdr
                                 (gnus-registry-fetch-extra key 'sender))))
               (when (and single-match
                          this-sender