diff options
author | June McEnroe <june@causal.agency> | 2020-08-10 14:24:39 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-08-10 14:24:39 -0400 |
commit | 8f6397137cb25f593a581605ed0126ade395813a (patch) | |
tree | 44cceca17a325b4e83ff11f0bd3b0aa1f58ef74c | |
parent | Refactor clientCA and clientSTS as clientCaps (diff) | |
download | pounce-8f6397137cb25f593a581605ed0126ade395813a.tar.gz pounce-8f6397137cb25f593a581605ed0126ade395813a.zip |
Refactor intercept to use Handlers and fix QUIT w/o message 1.4p1
The change to support broken clients with bad line endings broke the interception of QUIT with no message parameter, because the CR is part of the length passed to intercept.
-rw-r--r-- | client.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/client.c b/client.c index 9246085..dc33288 100644 --- a/client.c +++ b/client.c @@ -332,12 +332,12 @@ static bool intercept(const char *line, size_t len) { len -= sp - line; line = sp; } - if (len >= 4 && !memcmp(line, "CAP ", 4)) return true; - if (len == 4 && !memcmp(line, "QUIT", 4)) return true; - if (len >= 5 && !memcmp(line, "QUIT ", 5)) return true; - if (len >= 7 && !memcmp(line, "NOTICE ", 7)) return true; - if (len >= 7 && !memcmp(line, "TAGMSG ", 7)) return true; - if (len >= 8 && !memcmp(line, "PRIVMSG ", 8)) return true; + for (size_t i = 0; i < ARRAY_LEN(Handlers); ++i) { + size_t n = strlen(Handlers[i].cmd); + if (len < n) continue; + if (memcmp(line, Handlers[i].cmd, n)) continue; + if (len == n || line[n] == ' ' || line[n] == '\r') return true; + } return false; } |