emacs: Fix exception when fetching empty or unconfigured settings
authorAustin Clements <amdragon@MIT.EDU>
Thu, 20 Feb 2014 19:16:35 +0000 (14:16 -0500)
committerDavid Bremner <david@tethera.net>
Sat, 22 Feb 2014 23:51:03 +0000 (19:51 -0400)
When "notmuch config" is called with the name of an empty or
unconfigured setting, it prints nothing (not even a new line).
Previously, `notmuch-config-get' assumed it would always print a
newline.  As a result, when `notmuch-config-get' was called with the
name of an empty of unconfigured setting, it would attempt to
(substring "" 0 -1) to strip the newline, which would fail with a
(args-out-of-range "" 0 -1) exception.

Fix this by only stripping the newline if there actually is one.

emacs/notmuch-lib.el

index fa35fa9fd89384cd16651bd07c767b32f0080ac1..09110b5382c6bd024dd0091aad20ef662b4416a3 100644 (file)
@@ -198,8 +198,13 @@ on the command line, and then retry your notmuch command")))
 
 (defun notmuch-config-get (item)
   "Return a value from the notmuch configuration."
-  ;; Trim off the trailing newline
-  (substring (notmuch-command-to-string "config" "get" item) 0 -1))
+  (let* ((val (notmuch-command-to-string "config" "get" item))
+        (len (length val)))
+    ;; Trim off the trailing newline (if the value is empty or not
+    ;; configured, there will be no newline)
+    (if (and (> len 0) (= (aref val (- len 1)) ?\n))
+       (substring val 0 -1)
+      val)))
 
 (defun notmuch-database-path ()
   "Return the database.path value from the notmuch configuration."