[PATCH WIP] emacs: Sanitize authors and subjects in search and show
Jani Nikula
jani at nikula.org
Fri Oct 11 08:20:51 PDT 2013
On Fri, 11 Oct 2013, Austin Clements <amdragon at MIT.EDU> wrote:
> Authors and subjects can contain embedded, encoded control characters
> like "\n" and "\t" that mess up display. Transform control characters
> into spaces everywhere we display them in search and show.
> ---
>
> This could obviously use some tests, but I thought I'd get it out
> there to see what people thought or if the behavior should be tweaked.
I like it. Seems to work as advertized with some crappy Subject: lines
in my mail.
BR,
Jani.
>
> Of course, I can't guarantee that this is all of the places we display
> untrusted header text. I'm really not sure how to make that guarantee
> (suggestions welcome).
>
> emacs/notmuch-lib.el | 6 ++++++
> emacs/notmuch-show.el | 7 ++++---
> emacs/notmuch.el | 6 ++++--
> 3 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index 58f3313..6541282 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -243,6 +243,12 @@ depending on the value of `notmuch-poll-script'."
> "[No Subject]"
> subject)))
>
> +(defun notmuch-sanitize (str)
> + "Sanitize control character in STR.
> +
> +This includes newlines, tabs, and other funny characters."
> + (replace-regexp-in-string "[[:cntrl:]\x7f\u2028\u2029]+" " " str))
> +
> (defun notmuch-escape-boolean-term (term)
> "Escape a boolean term for use in a query.
>
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index 7325792..fa11d98 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -407,7 +407,8 @@ unchanged ADDRESS if parsing fails."
> message at DEPTH in the current thread."
> (let ((start (point)))
> (insert (notmuch-show-spaces-n (* notmuch-show-indent-messages-width depth))
> - (notmuch-show-clean-address (plist-get headers :From))
> + (notmuch-sanitize
> + (notmuch-show-clean-address (plist-get headers :From)))
> " ("
> date
> ") ("
> @@ -417,7 +418,7 @@ message at DEPTH in the current thread."
>
> (defun notmuch-show-insert-header (header header-value)
> "Insert a single header."
> - (insert header ": " header-value "\n"))
> + (insert header ": " (notmuch-sanitize header-value) "\n"))
>
> (defun notmuch-show-insert-headers (headers)
> "Insert the headers of the current message."
> @@ -1154,7 +1155,7 @@ function is used."
> (jit-lock-register #'notmuch-show-buttonise-links)
>
> ;; Set the header line to the subject of the first message.
> - (setq header-line-format (notmuch-show-strip-re (notmuch-show-get-subject)))
> + (setq header-line-format (notmuch-sanitize (notmuch-show-strip-re (notmuch-show-get-subject))))
>
> (run-hooks 'notmuch-show-hook))))
>
> diff --git a/emacs/notmuch.el b/emacs/notmuch.el
> index c47c6b5..44cd2fd 100644
> --- a/emacs/notmuch.el
> +++ b/emacs/notmuch.el
> @@ -791,11 +791,13 @@ non-authors is found, assume that all of the authors match."
> (plist-get result :total)))
> 'face 'notmuch-search-count)))
> ((string-equal field "subject")
> - (insert (propertize (format format-string (plist-get result :subject))
> + (insert (propertize (format format-string
> + (notmuch-sanitize (plist-get result :subject)))
> 'face 'notmuch-search-subject)))
>
> ((string-equal field "authors")
> - (notmuch-search-insert-authors format-string (plist-get result :authors)))
> + (notmuch-search-insert-authors
> + format-string (notmuch-sanitize (plist-get result :authors))))
>
> ((string-equal field "tags")
> (let ((tags (plist-get result :tags)))
> --
> 1.8.4.rc3
More information about the notmuch
mailing list