From 70dcda57f5b44e59170c70c643fa9bdc274ac1c0 Mon Sep 17 00:00:00 2001 From: "kaie%kuix.de" Date: Wed, 29 Aug 2007 23:05:22 +0000 Subject: [PATCH] bug 380744, Thunderbird reports "unable to decrypt" on truncated decryptable messages r=rrelyea, sr=mscott, a=dveditz git-svn-id: svn://10.0.0.236/branches/MOZILLA_1_8_BRANCH@233357 18797224-902f-48f8-a5cc-f745e15eee43 --- .../smime/content/msgHdrViewSMIMEOverlay.js | 8 ++++++-- .../resources/content/msgReadSecurityInfo.js | 5 +++++ mozilla/mailnews/mime/src/mimecms.cpp | 16 +++++++++++++++- .../manager/ssl/public/nsICMSMessageErrors.idl | 4 ++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/mozilla/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js b/mozilla/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js index aad4f2bb17e..04ccfd020a4 100644 --- a/mozilla/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js +++ b/mozilla/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js @@ -125,8 +125,12 @@ var smimeHeaderSink = gEncryptedURIService.rememberEncrypted(gMyLastEncryptedURI); } - if (nsICMSMessageErrors.SUCCESS != aEncryptionStatus) + switch (aEncryptionStatus) { + case nsICMSMessageErrors.SUCCESS: + case nsICMSMessageErrors.ENCRYPT_INCOMPLETE: + break; + default: var brand = gBrandBundle.getString("brandShortName"); var title = gSMIMEBundle.getString("CantDecryptTitle").replace(/%brand%/g,brand); var body = gSMIMEBundle.getString("CantDecryptBody").replace(/%brand%/g,brand); @@ -142,7 +146,7 @@ var smimeHeaderSink = title+"
\n"+ body+"\n"+ "", false); - + break; } }, diff --git a/mozilla/mailnews/extensions/smime/resources/content/msgReadSecurityInfo.js b/mozilla/mailnews/extensions/smime/resources/content/msgReadSecurityInfo.js index 03d5871657f..3fb228e771e 100644 --- a/mozilla/mailnews/extensions/smime/resources/content/msgReadSecurityInfo.js +++ b/mozilla/mailnews/extensions/smime/resources/content/msgReadSecurityInfo.js @@ -184,6 +184,11 @@ function onLoad() encInfo = "EIValid"; break; + case nsICMSMessageErrors.ENCRYPT_INCOMPLETE: + encInfoLabel = "EIInvalidLabel"; + encInfo = "EIContentAltered"; + break; + case nsICMSMessageErrors.GENERAL_ERROR: encInfoLabel = "EIInvalidLabel"; encInfoHeader = "EIInvalidHeader"; diff --git a/mozilla/mailnews/mime/src/mimecms.cpp b/mozilla/mailnews/mime/src/mimecms.cpp index d9f945dfc7f..531bdfbe2f6 100644 --- a/mozilla/mailnews/mime/src/mimecms.cpp +++ b/mozilla/mailnews/mime/src/mimecms.cpp @@ -97,6 +97,7 @@ typedef struct MimeCMSdata PRBool ci_is_encrypted; char *sender_addr; PRBool decoding_failed; + PRUint32 decoded_bytes; MimeObject *self; PRBool parent_is_encrypted_p; PRBool parent_holds_stamp_p; @@ -108,6 +109,7 @@ typedef struct MimeCMSdata ci_is_encrypted(PR_FALSE), sender_addr(nsnull), decoding_failed(PR_FALSE), + decoded_bytes(0), self(nsnull), parent_is_encrypted_p(PR_FALSE), parent_holds_stamp_p(PR_FALSE) @@ -146,6 +148,8 @@ static void MimeCMS_content_callback (void *arg, const char *buf, unsigned long data->output_fn = 0; return; } + + data->decoded_bytes += length; } PRBool MimeEncryptedCMS_encrypted_p (MimeObject *obj) @@ -630,7 +634,17 @@ MimeCMS_eof (void *crypto_closure, PRBool abort_p) if (!data->content_info) { - status = nsICMSMessageErrors::GENERAL_ERROR; + if (!data->decoded_bytes) + { + // We were unable to decode any data. + status = nsICMSMessageErrors::GENERAL_ERROR; + } + else + { + // Some content got decoded, but we failed to decode + // the final summary, probably we got truncated data. + status = nsICMSMessageErrors::ENCRYPT_INCOMPLETE; + } // Although a CMS message could be either encrypted or opaquely signed, // what we see is most likely encrypted, because if it were diff --git a/mozilla/security/manager/ssl/public/nsICMSMessageErrors.idl b/mozilla/security/manager/ssl/public/nsICMSMessageErrors.idl index 0c5c51b7187..d97aa6ffc3c 100644 --- a/mozilla/security/manager/ssl/public/nsICMSMessageErrors.idl +++ b/mozilla/security/manager/ssl/public/nsICMSMessageErrors.idl @@ -63,6 +63,7 @@ interface nsICMSMessageErrors : nsISupports const long VERIFY_CERT_WITHOUT_ADDRESS = 1040; const long ENCRYPT_NO_BULK_ALG = 1056; + const long ENCRYPT_INCOMPLETE = 1057; }; %{ C++ @@ -118,4 +119,7 @@ interface nsICMSMessageErrors : nsISupports #define NS_ERROR_CMS_ENCRYPT_NO_BULK_ALG \ NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_SECURITY, \ nsICMSMessageErrors::ENCRYPT_NO_BULK_ALG) +#define NS_ERROR_CMS_ENCRYPT_INCOMPLETE \ + NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_SECURITY, \ + nsICMSMessageErrors::ENCRYPT_INCOMPLETE) %}