diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-09-08 07:40:31 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-09-08 07:40:31 -0700 |
commit | 9ab8c44a5c30c47a5b2ce66f27b46d384d446df2 (patch) | |
tree | 55a62738f6c5591a5f815f5eb10d4ff53334a8fb | |
parent | 4ced8d1bf77a6d42d76843e345bef6d9f765d021 (diff) | |
download | txr-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.
-rw-r--r-- | parser.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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--; |