Bladeren bron

fix analogous invalid parameters for ERR_NOSUCHNICK

tags/v2.0.0-rc1
Shivaram Lingamneni 4 jaren geleden
bovenliggende
commit
0880f20f4b
4 gewijzigde bestanden met toevoegingen van 28 en 35 verwijderingen
  1. 3
    4
      irc/channel.go
  2. 18
    27
      irc/handlers.go
  3. 1
    1
      irc/nickname.go
  4. 6
    3
      irc/types.go

+ 3
- 4
irc/channel.go Bestand weergeven

@@ -1048,10 +1048,9 @@ func (channel *Channel) SendSplitMessage(command string, minPrefixMode modes.Mod
1048 1048
 }
1049 1049
 
1050 1050
 func (channel *Channel) applyModeToMember(client *Client, mode modes.Mode, op modes.ModeOp, nick string, rb *ResponseBuffer) (result *modes.ModeChange) {
1051
-	casefoldedName, err := CasefoldName(nick)
1052
-	target := channel.server.clients.Get(casefoldedName)
1053
-	if err != nil || target == nil {
1054
-		rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.Nick(), nick, client.t("No such nick"))
1051
+	target := channel.server.clients.Get(nick)
1052
+	if target == nil {
1053
+		rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.Nick(), utils.SafeErrorParam(nick), client.t("No such nick"))
1055 1054
 		return nil
1056 1055
 	}
1057 1056
 

+ 18
- 27
irc/handlers.go Bestand weergeven

@@ -1228,10 +1228,9 @@ func inviteHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
1228 1228
 	nickname := msg.Params[0]
1229 1229
 	channelName := msg.Params[1]
1230 1230
 
1231
-	casefoldedNickname, err := CasefoldName(nickname)
1232
-	target := server.clients.Get(casefoldedNickname)
1233
-	if err != nil || target == nil {
1234
-		rb.Add(nil, server.name, ERR_NOSUCHNICK, client.nick, nickname, client.t("No such nick"))
1231
+	target := server.clients.Get(nickname)
1232
+	if target == nil {
1233
+		rb.Add(nil, server.name, ERR_NOSUCHNICK, client.Nick(), utils.SafeErrorParam(nickname), client.t("No such nick"))
1235 1234
 		return false
1236 1235
 	}
1237 1236
 
@@ -1313,7 +1312,7 @@ func sajoinHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
1313 1312
 		} else {
1314 1313
 			target = server.clients.Get(msg.Params[0])
1315 1314
 			if target == nil {
1316
-				rb.Add(nil, server.name, ERR_NOSUCHNICK, client.Nick(), msg.Params[0], "No such nick")
1315
+				rb.Add(nil, server.name, ERR_NOSUCHNICK, client.Nick(), utils.SafeErrorParam(msg.Params[0]), "No such nick")
1317 1316
 				return false
1318 1317
 			}
1319 1318
 			channelString = msg.Params[1]
@@ -1385,10 +1384,9 @@ func killHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
1385 1384
 		comment = msg.Params[1]
1386 1385
 	}
1387 1386
 
1388
-	casefoldedNickname, err := CasefoldName(nickname)
1389
-	target := server.clients.Get(casefoldedNickname)
1390
-	if err != nil || target == nil {
1391
-		rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.nick, nickname, client.t("No such nick"))
1387
+	target := server.clients.Get(nickname)
1388
+	if target == nil {
1389
+		rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.nick, utils.SafeErrorParam(nickname), client.t("No such nick"))
1392 1390
 		return false
1393 1391
 	}
1394 1392
 
@@ -2564,25 +2562,23 @@ func userHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
2564 2562
 
2565 2563
 // USERHOST <nickname>{ <nickname>}
2566 2564
 func userhostHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
2567
-	returnedNicks := make(map[string]bool)
2565
+	returnedClients := make(ClientSet)
2568 2566
 
2569 2567
 	for i, nickname := range msg.Params {
2570 2568
 		if i >= 10 {
2571 2569
 			break
2572 2570
 		}
2573 2571
 
2574
-		casefoldedNickname, err := CasefoldName(nickname)
2575
-		target := server.clients.Get(casefoldedNickname)
2576
-		if err != nil || target == nil {
2577
-			rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.nick, nickname, client.t("No such nick"))
2578
-			return false
2579
-		}
2580
-		if returnedNicks[casefoldedNickname] {
2572
+		target := server.clients.Get(nickname)
2573
+		if target == nil {
2574
+			rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.nick, utils.SafeErrorParam(nickname), client.t("No such nick"))
2581 2575
 			continue
2582 2576
 		}
2583
-
2584 2577
 		// to prevent returning multiple results for a single nick
2585
-		returnedNicks[casefoldedNickname] = true
2578
+		if returnedClients.Has(target) {
2579
+			continue
2580
+		}
2581
+		returnedClients.Add(target)
2586 2582
 
2587 2583
 		var isOper, isAway string
2588 2584
 
@@ -2730,11 +2726,6 @@ func whoisHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
2730 2726
 		masksString = msg.Params[0]
2731 2727
 	}
2732 2728
 
2733
-	if len(strings.TrimSpace(masksString)) < 1 {
2734
-		rb.Add(nil, server.name, ERR_UNKNOWNERROR, client.nick, msg.Command, client.t("No masks given"))
2735
-		return false
2736
-	}
2737
-
2738 2729
 	handleService := func(nick string) bool {
2739 2730
 		cfnick, _ := CasefoldName(nick)
2740 2731
 		service, ok := OragonoServices[cfnick]
@@ -2754,7 +2745,7 @@ func whoisHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
2754 2745
 		for _, mask := range strings.Split(masksString, ",") {
2755 2746
 			matches := server.clients.FindAll(mask)
2756 2747
 			if len(matches) == 0 && !handleService(mask) {
2757
-				rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.nick, mask, client.t("No such nick"))
2748
+				rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.Nick(), utils.SafeErrorParam(mask), client.t("No such nick"))
2758 2749
 				continue
2759 2750
 			}
2760 2751
 			for mclient := range matches {
@@ -2768,11 +2759,11 @@ func whoisHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res
2768 2759
 		if mclient != nil {
2769 2760
 			client.getWhoisOf(mclient, rb)
2770 2761
 		} else if !handleService(nick) {
2771
-			rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.nick, masksString, client.t("No such nick"))
2762
+			rb.Add(nil, client.server.name, ERR_NOSUCHNICK, client.Nick(), utils.SafeErrorParam(masksString), client.t("No such nick"))
2772 2763
 		}
2773 2764
 		// fall through, ENDOFWHOIS is always sent
2774 2765
 	}
2775
-	rb.Add(nil, server.name, RPL_ENDOFWHOIS, client.nick, masksString, client.t("End of /WHOIS list"))
2766
+	rb.Add(nil, server.name, RPL_ENDOFWHOIS, client.nick, utils.SafeErrorParam(masksString), client.t("End of /WHOIS list"))
2776 2767
 	return false
2777 2768
 }
2778 2769
 

+ 1
- 1
irc/nickname.go Bestand weergeven

@@ -49,7 +49,7 @@ func performNickChange(server *Server, client *Client, target *Client, session *
49 49
 	} else if err == errNicknameReserved {
50 50
 		rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, nickname, client.t("Nickname is reserved by a different account"))
51 51
 	} else if err == errNicknameInvalid {
52
-		rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, currentNick, nickname, client.t("Erroneous nickname"))
52
+		rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, currentNick, utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
53 53
 	} else if err != nil {
54 54
 		rb.Add(nil, server.name, ERR_UNKNOWNERROR, currentNick, "NICK", fmt.Sprintf(client.t("Could not set or change nickname: %s"), err.Error()))
55 55
 	}

+ 6
- 3
irc/types.go Bestand weergeven

@@ -7,12 +7,14 @@ package irc
7 7
 
8 8
 import "github.com/oragono/oragono/irc/modes"
9 9
 
10
+type empty struct{}
11
+
10 12
 // ClientSet is a set of clients.
11
-type ClientSet map[*Client]bool
13
+type ClientSet map[*Client]empty
12 14
 
13 15
 // Add adds the given client to this set.
14 16
 func (clients ClientSet) Add(client *Client) {
15
-	clients[client] = true
17
+	clients[client] = empty{}
16 18
 }
17 19
 
18 20
 // Remove removes the given client from this set.
@@ -22,7 +24,8 @@ func (clients ClientSet) Remove(client *Client) {
22 24
 
23 25
 // Has returns true if the given client is in this set.
24 26
 func (clients ClientSet) Has(client *Client) bool {
25
-	return clients[client]
27
+	_, ok := clients[client]
28
+	return ok
26 29
 }
27 30
 
28 31
 // MemberSet is a set of members with modes.

Laden…
Annuleren
Opslaan