From 9ab8c44a5c30c47a5b2ce66f27b46d384d446df2 Mon Sep 17 00:00:00 2001
From: Kaz Kylheku <kaz@kylheku.com>
Date: Tue, 8 Sep 2015 07:40:31 -0700
Subject: Bugfix: underrun on empty line tab completion.

* parser.c (provide_completions): If strlen(data) is zero,
the calculation of ptr places it at data - 1. Instead,
let us calculate a zero value for ptr and then bail based
on this.
---
 parser.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/parser.c b/parser.c
index 6b5a0593..92c67829 100644
--- a/parser.c
+++ b/parser.c
@@ -418,7 +418,7 @@ static void provide_completions(const char *data,
                                 void *ctx)
 {
   const char *gly = "!$%&*+-<=>?\\_~/";
-  const char *ptr = data + strlen(data) - 1;
+  const char *ptr = data[0] ? data + strlen(data) - 1 : 0;
   const char *sym = 0, *pkg = 0;
   const char *end;
   val keyword = nil;
@@ -426,6 +426,9 @@ static void provide_completions(const char *data,
 
   (void) ctx;
 
+  if (!ptr)
+    return;
+
   while ((isalnum(*ptr) || strchr(gly, *ptr)) && (sym = ptr) && ptr > data)
     ptr--;
 
-- 
cgit v1.2.3