فهرست منبع

Fix getnick() processing.

nick starts out always having a first element but
on the loop it turns into a raw pointer.
Bryan Drewery 6 سال پیش
والد
کامیت
3bdbf3d969
2فایلهای تغییر یافته به همراه8 افزوده شده و 7 حذف شده
  1. 7 6
      src/mod/irc.mod/cmdsirc.cc
  2. 1 1
      src/mod/server.mod/servmsg.cc

+ 7 - 6
src/mod/irc.mod/cmdsirc.cc

@@ -82,9 +82,10 @@ char *getnick(const char *handle, struct chanset_t *chan)
   for (memberlist *m = chan->channel.member; m && m->nick[0]; m = m->next) {
     member_getuser(m);
     if (m->user && !strcasecmp(m->user->handle, handle))
-      return m->nick[0] ? m->nick : NULL;
+      return m->nick;
   }
-  return NULL;
+  static char empty[] = "";
+  return empty;
 }
 
 static void cmd_act(int idx, char *par)
@@ -358,7 +359,7 @@ static void cmd_voice(int idx, char *par)
     chan = chanset;
   putlog(LOG_CMDS, "*", "#%s# (%s) voice %s", dcc[idx].nick, all ? "*" : chan->dname , nick);
   while (chan) {
-    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
+    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
       if (all) goto next;
       dprintf(idx, "Usage: voice <nick> [channel|*]\n");
       return;
@@ -422,7 +423,7 @@ static void cmd_devoice(int idx, char *par)
     chan = chanset;
   putlog(LOG_CMDS, "*", "#%s# (%s) devoice %s", dcc[idx].nick, all ? "*" : chan->dname, nick);
   while (chan) {
-  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
+  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
     if (all) goto next;
     dprintf(idx, "Usage: devoice <nick> [channel|*]\n");
     return;
@@ -494,7 +495,7 @@ static void cmd_op(int idx, char *par)
 
   while (chan) {
   get_user_flagrec(dcc[idx].user, &user, chan->dname);
-  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
+  if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
     if (all) goto next;
     dprintf(idx, "Usage: op <nick> [channel|*]\n");
     return;
@@ -985,7 +986,7 @@ static void cmd_deop(int idx, char *par)
 
   while (chan) {
     get_user_flagrec(dcc[idx].user, &user, chan->dname);
-    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))) {
+    if (!nick[0] && !(nick = getnick(dcc[idx].nick, chan))[0]) {
       if (all) goto next;  
       dprintf(idx, "Usage: deop <nick> [channel|*]\n");
       return;

+ 1 - 1
src/mod/server.mod/servmsg.cc

@@ -1732,7 +1732,7 @@ hide_chans(const char *nick, struct userrec *u, char *_channels, bool publicOnly
     if (!chan || 
         
         (!publicOnly && (
-          getnick(u->handle, chan) ||
+          getnick(u->handle, chan)[0] ||
           !(channel_hidden(chan)) || 
           chk_op(fr, chan)
         )) ||