summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-09-08 07:40:31 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-09-08 07:40:31 -0700
commit9ab8c44a5c30c47a5b2ce66f27b46d384d446df2 (patch)
tree55a62738f6c5591a5f815f5eb10d4ff53334a8fb /parser.c
parent4ced8d1bf77a6d42d76843e345bef6d9f765d021 (diff)
downloadtxr-9ab8c44a5c30c47a5b2ce66f27b46d384d446df2.tar.gz
txr-9ab8c44a5c30c47a5b2ce66f27b46d384d446df2.tar.bz2
txr-9ab8c44a5c30c47a5b2ce66f27b46d384d446df2.zip
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.
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c5
1 files changed, 4 insertions, 1 deletions
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--;