Преглед изворни кода

Fix packet length validation

Joseph C. Lehner пре 7 година
родитељ
комит
f944f320b9
1 измењених фајлова са 5 додато и 2 уклоњено
  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;