Explorar el Código

* Port [3921] to 1.2.16 from trunk
* Fix more places where strings are possibly not properly null-terminated


svn: 3922

Bryan Drewery hace 17 años
padre
commit
acfd85bbb4
Se han modificado 5 ficheros con 10 adiciones y 14 borrados
  1. 1 1
      src/botmsg.c
  2. 3 6
      src/botnet.c
  3. 1 1
      src/mod/channels.mod/userchan.c
  4. 2 4
      src/mod/irc.mod/chan.c
  5. 3 2
      src/mod/share.mod/share.c

+ 1 - 1
src/botmsg.c

@@ -456,7 +456,7 @@ int add_note(char *to, char *from, char *msg, int idx, int echo)
     char x[21] = "";
 
     *p = 0;
-    strncpy(x, to, 20);
+    strlcpy(x, to, sizeof(x));
     x[20] = 0;
     *p = '@';
     p++;

+ 3 - 6
src/botnet.c

@@ -170,10 +170,8 @@ int addparty(char *bot, char *nick, int chan, char flag, int sock, char *from, i
     maxparty += 50;
     party = (party_t *) my_realloc((void *) party, maxparty * sizeof(party_t));
   }
-  strncpy(party[parties].nick, nick, HANDLEN);
-  party[parties].nick[HANDLEN] = 0;
-  strncpy(party[parties].bot, bot, HANDLEN);
-  party[parties].bot[HANDLEN] = 0;
+  strlcpy(party[parties].nick, nick, sizeof(party[parties].nick));
+  strlcpy(party[parties].bot, bot, sizeof(party[parties].bot));
   party[parties].chan = chan;
   party[parties].sock = sock;
   party[parties].status = 0;
@@ -255,8 +253,7 @@ int partynick(char *bot, int sock, char *nick)
   for (int i = 0; i < parties; i++) {
     if (!egg_strcasecmp(party[i].bot, bot) && (party[i].sock == sock)) {
       strlcpy(work, party[i].nick, sizeof(work));
-      strncpy(party[i].nick, nick, HANDLEN);
-      party[i].nick[HANDLEN] = 0;
+      strlcpy(party[i].nick, nick, sizeof(party[i].nick));
       strlcpy(nick, work, HANDLEN + 1);
       return i;
     }

+ 1 - 1
src/mod/channels.mod/userchan.c

@@ -44,7 +44,7 @@ struct chanuserrec *add_chanrec(struct userrec *u, char *chname)
     ch->info = NULL;
     ch->flags = 0;
     ch->laston = 0;
-    strncpy(ch->channel, chname, 81);
+    strlcpy(ch->channel, chname, sizeof(ch->channel));
     ch->channel[80] = 0;
     if (!noshare)
       shareout("+cr %s %s\n", u->handle, chname);

+ 2 - 4
src/mod/irc.mod/chan.c

@@ -505,8 +505,7 @@ static bool detect_chan_flood(char *floodnick, char *floodhost, char *from,
       return 0;
   }
   if (rfc_casecmp(chan->floodwho[which], p)) {	/* new */
-    strncpy(chan->floodwho[which], p, sizeof(chan->floodwho[which]));
-    chan->floodwho[which][sizeof(chan->floodwho[which]) - 1] = 0;
+    strlcpy(chan->floodwho[which], p, sizeof(chan->floodwho[which]));
     chan->floodtime[which] = now;
     chan->floodnum[which] = 1;
     return 0;
@@ -2270,8 +2269,7 @@ static int gotinvite(char *from, char *msg)
       flood = 1;
   if (!flood)
     putlog(LOG_MISC, "*", "%s!%s invited me to %s", nick, from, msg);
-  strncpy(last_invchan, msg, 299);
-  last_invchan[299] = 0;
+  strlcpy(last_invchan, msg, sizeof(last_invchan));
   last_invtime = now;
   chan = findchan(msg);
   if (!chan)

+ 3 - 2
src/mod/share.mod/share.c

@@ -247,9 +247,10 @@ add_delay(struct chanset_t *chan, int plsmns, int mode, char *mask)
   d->chan = chan;
   d->plsmns = plsmns;
   d->mode = mode;
-  d->mask = (char *) my_calloc(1, strlen(mask) + 1);
+  size_t mlen = strlen(mask) + 1;
+  d->mask = (char *) my_calloc(1, mlen);
 
-  strncpy(d->mask, mask, strlen(mask) + 1);
+  strlcpy(d->mask, mask, mlen);
   d->seconds = (int) (now + randint(20));
   d->next = start_delay;
   start_delay = d;