Yeah we probably shouldn't bother to look for commands that aren't 
[A-Za-z0-9_-]:

Index: edit.c
===================================================================
RCS file: /cvs/src/bin/ksh/edit.c,v
retrieving revision 1.56
diff -u -p -r1.56 edit.c
--- edit.c      7 Sep 2016 04:42:31 -0000       1.56
+++ edit.c      8 Sep 2016 09:45:21 -0000
@@ -584,9 +584,8 @@ x_try_array(const char *buf, int buflen,
     int *nwords, char ***words)
 {
        const char *cmd, *cp;
-       int cmdlen, n;
+       int cmdlen, n, i, slen;
        char *name, *s;
-       size_t slen;
        struct tbl *v, *vp;
 
        *nwords = 0;
@@ -604,6 +603,10 @@ x_try_array(const char *buf, int buflen,
        cmdlen = 0;
        while (cmd + cmdlen < want && !isspace((u_char)cmd[cmdlen]))
                cmdlen++;
+       for (i = 0; i < cmdlen; i++) {
+               if (!isalnum((u_char)cmd[i]) && cmd[i] != '_' && cmd[i] != '-')
+                       return 0;
+       }
 
        /* Take a stab at argument count from here. */
        n = 1;


On Thu, Sep 08, 2016 at 09:43:53AM +0100, Stuart Henderson wrote:
> I just ran into this which was introduced with custom completions
> (I haven't setup any complete_* arrays).
> 
> $ ag "(foo)[^_]" /u<tab>
> 
> results in
> 
> ksh: ^_: unexpected `^'
> 

Reply via email to