Disregard protocol parameter of multipart/encrypted and /signed parts with missing bodies
This commit is contained in:
parent
2902657e5b
commit
96bca146c0
2 changed files with 44 additions and 9 deletions
|
@ -227,8 +227,10 @@ public class MessageCryptoStructureDetector {
|
||||||
}
|
}
|
||||||
|
|
||||||
String protocolParameter = MimeUtility.getHeaderParameter(part.getContentType(), PROTOCOL_PARAMETER);
|
String protocolParameter = MimeUtility.getHeaderParameter(part.getContentType(), PROTOCOL_PARAMETER);
|
||||||
BodyPart signatureBodyPart = mimeMultipart.getBodyPart(1);
|
|
||||||
return isSameMimeType(protocolParameter, signatureBodyPart.getMimeType());
|
boolean dataUnavailable = protocolParameter == null && mimeMultipart.getBodyPart(0).getBody() == null;
|
||||||
|
boolean protocolMatches = isSameMimeType(protocolParameter, mimeMultipart.getBodyPart(1).getMimeType());
|
||||||
|
return dataUnavailable || protocolMatches;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isPartMultipartEncrypted(Part part) {
|
private static boolean isPartMultipartEncrypted(Part part) {
|
||||||
|
@ -244,8 +246,10 @@ public class MessageCryptoStructureDetector {
|
||||||
}
|
}
|
||||||
|
|
||||||
String protocolParameter = MimeUtility.getHeaderParameter(part.getContentType(), PROTOCOL_PARAMETER);
|
String protocolParameter = MimeUtility.getHeaderParameter(part.getContentType(), PROTOCOL_PARAMETER);
|
||||||
BodyPart signatureBodyPart = mimeMultipart.getBodyPart(0);
|
|
||||||
return isSameMimeType(protocolParameter, signatureBodyPart.getMimeType());
|
boolean dataUnavailable = protocolParameter == null && mimeMultipart.getBodyPart(1).getBody() == null;
|
||||||
|
boolean protocolMatches = isSameMimeType(protocolParameter, mimeMultipart.getBodyPart(0).getMimeType());
|
||||||
|
return dataUnavailable || protocolMatches;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMultipartEncryptedOpenPgpProtocol(Part part) {
|
public static boolean isMultipartEncryptedOpenPgpProtocol(Part part) {
|
||||||
|
|
|
@ -182,7 +182,7 @@ public class MessageCryptoStructureDetectorTest {
|
||||||
Message message = messageFromBody(
|
Message message = messageFromBody(
|
||||||
multipart("encrypted", "application/not-pgp-encrypted",
|
multipart("encrypted", "application/not-pgp-encrypted",
|
||||||
bodypart("application/pgp-encrypted"),
|
bodypart("application/pgp-encrypted"),
|
||||||
bodypart("application/octet-stream")
|
bodypart("application/octet-stream", "content")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ public class MessageCryptoStructureDetectorTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void findEncrypted__withEmptyProtocol__shouldReturnEmpty() throws Exception {
|
public void findEncrypted__withBadProtocolAndNoBody__shouldReturnRoot() throws Exception {
|
||||||
Message message = messageFromBody(
|
Message message = messageFromBody(
|
||||||
multipart("encrypted", null,
|
multipart("encrypted", null,
|
||||||
bodypart("application/pgp-encrypted"),
|
bodypart("application/pgp-encrypted"),
|
||||||
|
@ -202,6 +202,21 @@ public class MessageCryptoStructureDetectorTest {
|
||||||
|
|
||||||
List<Part> encryptedParts = MessageCryptoStructureDetector.findMultipartEncryptedParts(message);
|
List<Part> encryptedParts = MessageCryptoStructureDetector.findMultipartEncryptedParts(message);
|
||||||
|
|
||||||
|
assertEquals(1, encryptedParts.size());
|
||||||
|
assertSame(message, encryptedParts.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void findEncrypted__withEmptyProtocol__shouldReturnEmpty() throws Exception {
|
||||||
|
Message message = messageFromBody(
|
||||||
|
multipart("encrypted", null,
|
||||||
|
bodypart("application/pgp-encrypted"),
|
||||||
|
bodypart("application/octet-stream", "content")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
List<Part> encryptedParts = MessageCryptoStructureDetector.findMultipartEncryptedParts(message);
|
||||||
|
|
||||||
assertTrue(encryptedParts.isEmpty());
|
assertTrue(encryptedParts.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,10 +339,26 @@ public class MessageCryptoStructureDetectorTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void findSigned__withBadProtocol__shouldReturnRoot() throws Exception {
|
public void findSigned__withNoProtocolAndNoBody__shouldReturnRoot() throws Exception {
|
||||||
|
Message message = messageFromBody(
|
||||||
|
multipart("signed", null,
|
||||||
|
bodypart("text/plain"),
|
||||||
|
bodypart("application/pgp-signature")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
List<Part> signedParts = MessageCryptoStructureDetector
|
||||||
|
.findMultipartSignedParts(message, messageCryptoAnnotations);
|
||||||
|
|
||||||
|
assertEquals(1, signedParts.size());
|
||||||
|
assertSame(message, signedParts.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void findSigned__withBadProtocol__shouldReturnNothing() throws Exception {
|
||||||
Message message = messageFromBody(
|
Message message = messageFromBody(
|
||||||
multipart("signed", "application/not-pgp-signature",
|
multipart("signed", "application/not-pgp-signature",
|
||||||
bodypart("text/plain"),
|
bodypart("text/plain", "content"),
|
||||||
bodypart("application/pgp-signature")
|
bodypart("application/pgp-signature")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -342,7 +373,7 @@ public class MessageCryptoStructureDetectorTest {
|
||||||
public void findSigned__withEmptyProtocol__shouldReturnRoot() throws Exception {
|
public void findSigned__withEmptyProtocol__shouldReturnRoot() throws Exception {
|
||||||
Message message = messageFromBody(
|
Message message = messageFromBody(
|
||||||
multipart("signed", null,
|
multipart("signed", null,
|
||||||
bodypart("text/plain"),
|
bodypart("text/plain", "content"),
|
||||||
bodypart("application/pgp-signature")
|
bodypart("application/pgp-signature")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue