projects
/
NeonServV5.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3c64279
)
fixed crash in multiple commands if createTempUser returns NULL
author
pk910
<philipp@zoelle1.de>
Sun, 8 Jan 2012 04:47:47 +0000
(
05:47
+0100)
committer
pk910
<philipp@zoelle1.de>
Sun, 8 Jan 2012 04:50:31 +0000
(
05:50
+0100)
17 files changed:
src/IRCParser.c
patch
|
blob
|
history
src/UserNode.c
patch
|
blob
|
history
src/cmd_global_register.c
patch
|
blob
|
history
src/cmd_global_setaccess.c
patch
|
blob
|
history
src/cmd_neonserv_access.c
patch
|
blob
|
history
src/cmd_neonserv_adduser.c
patch
|
blob
|
history
src/cmd_neonserv_assignrank.c
patch
|
blob
|
history
src/cmd_neonserv_clvl.c
patch
|
blob
|
history
src/cmd_neonserv_deluser.c
patch
|
blob
|
history
src/cmd_neonserv_giveowner.c
patch
|
blob
|
history
src/cmd_neonserv_invite.c
patch
|
blob
|
history
src/cmd_neonserv_myaccess.c
patch
|
blob
|
history
src/cmd_neonserv_noregister.c
patch
|
blob
|
history
src/cmd_neonserv_suspend.c
patch
|
blob
|
history
src/cmd_neonserv_unban.c
patch
|
blob
|
history
src/cmd_neonserv_unsuspend.c
patch
|
blob
|
history
src/cmd_neonserv_wipeinfo.c
patch
|
blob
|
history
diff --git
a/src/IRCParser.c
b/src/IRCParser.c
index c1dbf6bca825450332036be9c19114fdc10dbe7a..6e6c61318a7a2104920bc1b331a4c35f766559b9 100644
(file)
--- a/
src/IRCParser.c
+++ b/
src/IRCParser.c
@@
-396,6
+396,7
@@
static IRC_CMD(raw_kick) {
if(isUserOnChan(target, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
if(user == NULL) {
user = createTempUser(from);
if(isUserOnChan(target, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
if(user == NULL) {
user = createTempUser(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
struct ChanUser *chanuser = getChanUser(target, chan);
user->flags |= USERFLAG_ISTMPUSER;
}
struct ChanUser *chanuser = getChanUser(target, chan);
@@
-425,6
+426,7
@@
static IRC_CMD(raw_topic) {
if(chan->chanbot != client->user) return 1; //just ignore it to prevent event duplicates
if(user == NULL) {
user = createTempUser(from);
if(chan->chanbot != client->user) return 1; //just ignore it to prevent event duplicates
if(user == NULL) {
user = createTempUser(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
event_topic(user, chan, argv[1]);
user->flags |= USERFLAG_ISTMPUSER;
}
event_topic(user, chan, argv[1]);
@@
-437,6
+439,7
@@
static IRC_CMD(raw_privmsg) {
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
if(!stricmp(user->nick, "*status") && !match("Disconnected from IRC.*", argv[1])) {
user->flags |= USERFLAG_ISTMPUSER;
}
if(!stricmp(user->nick, "*status") && !match("Disconnected from IRC.*", argv[1])) {
@@
-494,6
+497,7
@@
static IRC_CMD(raw_notice) {
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
if(argv[0][0] == '#') { //Channel notice
user->flags |= USERFLAG_ISTMPUSER;
}
if(argv[0][0] == '#') { //Channel notice
@@
-548,6
+552,7
@@
static IRC_CMD(raw_invite) {
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
event_invite(client, user, argv[1]);
user->flags |= USERFLAG_ISTMPUSER;
}
event_invite(client, user, argv[1]);
@@
-559,6
+564,7
@@
static IRC_CMD(raw_mode) {
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
user = createTempUser(from);
+ if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
}
if(argv[0][0] == '#') {
user->flags |= USERFLAG_ISTMPUSER;
}
if(argv[0][0] == '#') {
diff --git
a/src/UserNode.c
b/src/UserNode.c
index df4edebfe73f54a55e5d731ef957f9085baf1695..739722ad4009d8755d512b62f8aa50546588b44d 100644
(file)
--- a/
src/UserNode.c
+++ b/
src/UserNode.c
@@
-244,6
+244,9
@@
struct UserNode* createTempUser(const char *mask) {
for(i = 0; i < strlen(mask)+1; i++) {
if(cmask[i] == '!') {
cmask[i] = 0;
for(i = 0; i < strlen(mask)+1; i++) {
if(cmask[i] == '!') {
cmask[i] = 0;
+ if(!is_valid_nick(cmask)) {
+ return NULL;
+ }
user = malloc(sizeof(*user));
if (!user)
{
user = malloc(sizeof(*user));
if (!user)
{
diff --git
a/src/cmd_global_register.c
b/src/cmd_global_register.c
index 9132484b362a445ad4a1ddcbdda3398f4a11c381..45e5a759cf25312ceb1f0ccd00b8fd076dc24165 100644
(file)
--- a/
src/cmd_global_register.c
+++ b/
src/cmd_global_register.c
@@
-114,6
+114,10
@@
CMD_BIND(global_cmd_register) {
struct UserNode *cuser = getUserByNick(argv[1]);
if(!cuser) {
cuser = createTempUser(argv[1]);
struct UserNode *cuser = getUserByNick(argv[1]);
if(!cuser) {
cuser = createTempUser(argv[1]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[1]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_global_setaccess.c
b/src/cmd_global_setaccess.c
index d11fda6b8ee9aebc98d1858140c34f6e0f15356c..0458bd660ebe4369dce177bc774fe1021b04ac95 100644
(file)
--- a/
src/cmd_global_setaccess.c
+++ b/
src/cmd_global_setaccess.c
@@
-75,6
+75,10
@@
CMD_BIND(global_cmd_setaccess) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_access.c
b/src/cmd_neonserv_access.c
index 7636c79a98ab5655e106fa76d52bb55297098354..d036bf8bceb69251e6174c6c055bd52f4c1853b1 100644
(file)
--- a/
src/cmd_neonserv_access.c
+++ b/
src/cmd_neonserv_access.c
@@
-56,6
+56,10
@@
CMD_BIND(neonserv_cmd_access) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_adduser.c
b/src/cmd_neonserv_adduser.c
index 50ebd95bd1954e43aa701d05391f650716fb3c28..8eccf67873eb368ec1ac0f9ec311e8626c109013 100644
(file)
--- a/
src/cmd_neonserv_adduser.c
+++ b/
src/cmd_neonserv_adduser.c
@@
-80,6
+80,10
@@
CMD_BIND(neonserv_cmd_adduser) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_assignrank.c
b/src/cmd_neonserv_assignrank.c
index fb82bf042d84bf3b9abce038515f330e696f53a5..4fedaf85089e5fc508cfefba62991cef49be18c6 100644
(file)
--- a/
src/cmd_neonserv_assignrank.c
+++ b/
src/cmd_neonserv_assignrank.c
@@
-74,6
+74,10
@@
CMD_BIND(neonserv_cmd_assignrank) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_clvl.c
b/src/cmd_neonserv_clvl.c
index 4bb043e4a7892c808d095ea88f57aae5d09607de..a541c3d108a1368669fb0348209ce69a43c3b6ae 100644
(file)
--- a/
src/cmd_neonserv_clvl.c
+++ b/
src/cmd_neonserv_clvl.c
@@
-56,6
+56,10
@@
CMD_BIND(neonserv_cmd_clvl) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_deluser.c
b/src/cmd_neonserv_deluser.c
index 184de91f08d8e9cfddba4feed54a34c9873eb555..5188f01c7f8ef5d19b4e3b547556a250e2cc941e 100644
(file)
--- a/
src/cmd_neonserv_deluser.c
+++ b/
src/cmd_neonserv_deluser.c
@@
-40,6
+40,10
@@
CMD_BIND(neonserv_cmd_deluser) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_giveowner.c
b/src/cmd_neonserv_giveowner.c
index bc789c7d44b8815fd83f6777b9800fbf913d999d..9cf5ae750941c0439e6ac25563a089e2fcef2e23 100644
(file)
--- a/
src/cmd_neonserv_giveowner.c
+++ b/
src/cmd_neonserv_giveowner.c
@@
-55,6
+55,10
@@
CMD_BIND(neonserv_cmd_giveowner) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_invite.c
b/src/cmd_neonserv_invite.c
index 954d9117c934f0a3881ad7edd629e07118ff2b82..60c00a219aea884d0dceb8d8e51a8c28a59e1e81 100644
(file)
--- a/
src/cmd_neonserv_invite.c
+++ b/
src/cmd_neonserv_invite.c
@@
-53,6
+53,10
@@
CMD_BIND(neonserv_cmd_invite) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
} else if(getChanUser(cuser, chan)) {
reply(getTextBot(), user, "NS_INVITE_ON_CHAN", cuser->nick, chan->name);
cuser->flags |= USERFLAG_ISTMPUSER;
} else if(getChanUser(cuser, chan)) {
reply(getTextBot(), user, "NS_INVITE_ON_CHAN", cuser->nick, chan->name);
diff --git
a/src/cmd_neonserv_myaccess.c
b/src/cmd_neonserv_myaccess.c
index c37f0f8b0452f37a870ad497b89fb551f884c66e..03ea9421f62684fe4a1b9236b872ee32a914f3e8 100644
(file)
--- a/
src/cmd_neonserv_myaccess.c
+++ b/
src/cmd_neonserv_myaccess.c
@@
-67,6
+67,10
@@
CMD_BIND(neonserv_cmd_myaccess) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_noregister.c
b/src/cmd_neonserv_noregister.c
index ab1b432eee83ecce7118e91692ad7f0dd0d6078d..f0ba38020b2316e93c89bb09bfd112d4c98bf2fe 100644
(file)
--- a/
src/cmd_neonserv_noregister.c
+++ b/
src/cmd_neonserv_noregister.c
@@
-87,6
+87,10
@@
CMD_BIND(neonserv_cmd_noregister) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_suspend.c
b/src/cmd_neonserv_suspend.c
index d6cb87a68f11fc658db485c0e76addd97a130d70..b6d18b4004808ba6744c1aef3f05583cc3a1f12a 100644
(file)
--- a/
src/cmd_neonserv_suspend.c
+++ b/
src/cmd_neonserv_suspend.c
@@
-40,6
+40,10
@@
CMD_BIND(neonserv_cmd_suspend) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_unban.c
b/src/cmd_neonserv_unban.c
index 53b8919b0d749172c974b875540cc2fddd4927c6..3df515059fe0ea77ae8f9790070e148866903e6d 100644
(file)
--- a/
src/cmd_neonserv_unban.c
+++ b/
src/cmd_neonserv_unban.c
@@
-64,6
+64,9
@@
CMD_BIND(neonserv_cmd_unban) {
struct UserNode *cuser = getUserByNick(mask);
if(!cuser) {
cuser = createTempUser(mask);
struct UserNode *cuser = getUserByNick(mask);
if(!cuser) {
cuser = createTempUser(mask);
+ if(!cuser) {
+ break; //internal bot error
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
get_userauth(cuser, neonserv_cmd_unban_userauth_lookup, cache);
cache->pending_whos++;
cuser->flags |= USERFLAG_ISTMPUSER;
get_userauth(cuser, neonserv_cmd_unban_userauth_lookup, cache);
cache->pending_whos++;
diff --git
a/src/cmd_neonserv_unsuspend.c
b/src/cmd_neonserv_unsuspend.c
index c319d1dbe0715a28554a6895f2e64c823459bf0d..4053950e4b6c29aab397bb960257d47be227d077 100644
(file)
--- a/
src/cmd_neonserv_unsuspend.c
+++ b/
src/cmd_neonserv_unsuspend.c
@@
-40,6
+40,10
@@
CMD_BIND(neonserv_cmd_unsuspend) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
diff --git
a/src/cmd_neonserv_wipeinfo.c
b/src/cmd_neonserv_wipeinfo.c
index cf7b6141f12ab23482a419dd841fa7e5e2cfb4a6..71a1cc8b95a45ca1488bcb16b6d07a56ad1f0c65 100644
(file)
--- a/
src/cmd_neonserv_wipeinfo.c
+++ b/
src/cmd_neonserv_wipeinfo.c
@@
-40,6
+40,10
@@
CMD_BIND(neonserv_cmd_wipeinfo) {
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
struct UserNode *cuser = getUserByNick(argv[0]);
if(!cuser) {
cuser = createTempUser(argv[0]);
+ if(!cuser) {
+ reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[0]);
+ return;
+ }
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {
cuser->flags |= USERFLAG_ISTMPUSER;
}
if(cuser->flags & USERFLAG_ISAUTHED) {