Commit Diff


commit - f85da7301bab97460f5636a8e8da510df4a7a0ae
commit + efee726e37306bb059161d0518e365b1efe0a85a
blob - 4fe67bd413bf245ea27c234f845b3f3a87ce38c4
blob + 64c6e1f4d0a6c36ddc02b68175960d6942ee17d8
--- main.c
+++ main.c
@@ -482,7 +482,7 @@ dkim_signature_parse(struct header *header)
 
 	if (sig->i != NULL) {
 		i = osmtpd_ltok_skip_local_part(sig->i, 1) + 1;
-		ilen = strlen(i);
+		ilen = sig->isz - (size_t)(i - sig->i);
 		dlen = strlen(sig->d);
 		if (ilen < dlen) {
 			dkim_signature_state(sig, DKIM_PERMERROR,
@@ -490,9 +490,10 @@ dkim_signature_parse(struct header *header)
 			return;
 		}
 		i += ilen - dlen;
-		if ((i[-1] != '.' && i[-1] != '@') || strcmp(i, sig->d) != 0) {
+		if ((i[-1] != '.' && i[-1] != '@') ||
+		    strncmp(i, sig->d, dlen) != 0) {
 			dkim_signature_state(sig, DKIM_PERMERROR,
-			    "i tagn not subdomain of d");
+			    "i tag not subdomain of d");
 			return;
 		}
 	}