Răsfoiți Sursa

Fix packet length validation

Joseph C. Lehner 7 ani în urmă
părinte
comite
f944f320b9
1 a modificat fișierele cu 5 adăugiri și 2 ștergeri
  1. 5 2
      nmrp.c

+ 5 - 2
nmrp.c

@@ -276,10 +276,13 @@ static int pkt_recv(struct ethsock *sock, struct nmrp_pkt *pkt)
 
 	len = ntohs(pkt->msg.len) + sizeof(pkt->eh);
 
-	if (bytes != len) {
-		fprintf(stderr, "Unexpected packet length (expected %d, got %d).\n",
+	if (bytes < len) {
+		fprintf(stderr, "Short packet (expected %d, got %d).\n",
 				(int)len, (int)bytes);
 		return 1;
+	} else if (bytes > sizeof(pkt->msg) + sizeof(pkt->eh)) {
+		fprintf(stderr, "Packet size exceeds maximum (got %d).\n",
+				(int)bytes);
 	}
 
 	return 0;