Assume worst case for unknown user and host in splitMessage
The default USERLEN of 9 doesn't have a great source, the RFC only says that nicks are length 9, so my assumption is that usernames are not longer.master
parent
3bb3a11454
commit
cf1545870a
2
chat.c
2
chat.c
|
@ -64,7 +64,7 @@ enum Color idColors[IDCap] = {
|
||||||
};
|
};
|
||||||
uint idNext = Network + 1;
|
uint idNext = Network + 1;
|
||||||
|
|
||||||
struct Network network;
|
struct Network network = { .userLen = 9, .hostLen = 63 };
|
||||||
struct Self self = { .color = Default };
|
struct Self self = { .color = Default };
|
||||||
|
|
||||||
static const char *save;
|
static const char *save;
|
||||||
|
|
2
chat.h
2
chat.h
|
@ -84,6 +84,8 @@ static inline enum Color hash(const char *str) {
|
||||||
|
|
||||||
extern struct Network {
|
extern struct Network {
|
||||||
char *name;
|
char *name;
|
||||||
|
uint userLen;
|
||||||
|
uint hostLen;
|
||||||
char *chanTypes;
|
char *chanTypes;
|
||||||
char *prefixes;
|
char *prefixes;
|
||||||
char *prefixModes;
|
char *prefixModes;
|
||||||
|
|
12
command.c
12
command.c
|
@ -55,14 +55,12 @@ static void echoMessage(char *cmd, uint id, char *params) {
|
||||||
|
|
||||||
static void splitMessage(char *cmd, uint id, char *params) {
|
static void splitMessage(char *cmd, uint id, char *params) {
|
||||||
if (!params) return;
|
if (!params) return;
|
||||||
// FIXME: Get USERLEN, HOSTLEN from ISUPPORT and assume worst case if
|
|
||||||
// self.user and self.host are unset?
|
|
||||||
const char *nick = self.nick;
|
|
||||||
const char *user = (self.user ? self.user : "*");
|
|
||||||
const char *host = (self.host ? self.host : "*");
|
|
||||||
int overhead = snprintf(
|
int overhead = snprintf(
|
||||||
NULL, 0, ":%s!%s@%s %s %s :\r\n",
|
NULL, 0, ":%s!%*s@%*s %s %s :\r\n",
|
||||||
nick, user, host, cmd, idNames[id]
|
self.nick,
|
||||||
|
(self.user ? 0 : network.userLen), (self.user ? self.user : "*"),
|
||||||
|
(self.host ? 0 : network.hostLen), (self.host ? self.host : "*"),
|
||||||
|
cmd, idNames[id]
|
||||||
);
|
);
|
||||||
assert(overhead > 0 && overhead < 512);
|
assert(overhead > 0 && overhead < 512);
|
||||||
int chunk = 512 - overhead;
|
int chunk = 512 - overhead;
|
||||||
|
|
6
handle.c
6
handle.c
|
@ -238,6 +238,12 @@ static void handleReplyISupport(struct Message *msg) {
|
||||||
Network, Cold, tagTime(msg),
|
Network, Cold, tagTime(msg),
|
||||||
"You arrive in %s", msg->params[i]
|
"You arrive in %s", msg->params[i]
|
||||||
);
|
);
|
||||||
|
} else if (!strcmp(key, "USERLEN")) {
|
||||||
|
if (!msg->params[i]) continue;
|
||||||
|
network.userLen = strtoul(msg->params[i], NULL, 10);
|
||||||
|
} else if (!strcmp(key, "HOSTLEN")) {
|
||||||
|
if (!msg->params[i]) continue;
|
||||||
|
network.hostLen = strtoul(msg->params[i], NULL, 10);
|
||||||
} else if (!strcmp(key, "CHANTYPES")) {
|
} else if (!strcmp(key, "CHANTYPES")) {
|
||||||
if (!msg->params[i]) continue;
|
if (!msg->params[i]) continue;
|
||||||
set(&network.chanTypes, msg->params[i]);
|
set(&network.chanTypes, msg->params[i]);
|
||||||
|
|
Loading…
Reference in New Issue