Skip to content

Commit c3624a5

Browse files
committed
refactored to deal with class loader issues in ErrorBundles for modules
1 parent ab00336 commit c3624a5

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

mail/src/main/java/org/bouncycastle/mail/smime/validator/SignedMailValidator.java

+37-22
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ else if (message.isMimeType("application/pkcs7-mime")
169169
}
170170
else
171171
{
172-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
172+
ErrorBundle msg = createErrorBundle(
173173
"SignedMailValidator.noSignedMessage");
174174
throw new SignedMailValidatorException(msg);
175175
}
@@ -215,7 +215,7 @@ else if (message.isMimeType("application/pkcs7-mime")
215215
throw (SignedMailValidatorException)e;
216216
}
217217
// exception reading message
218-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
218+
ErrorBundle msg = createErrorBundle(
219219
"SignedMailValidator.exceptionReadingMessage",
220220
new Object[]{e.getMessage(), e, e.getClass().getName()});
221221
throw new SignedMailValidatorException(msg, e);
@@ -258,7 +258,7 @@ protected void validateSignatures(PKIXParameters pkixParam)
258258
}
259259
catch (CertStoreException cse)
260260
{
261-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
261+
ErrorBundle msg = createErrorBundle(
262262
"SignedMailValidator.exceptionRetrievingSignerCert",
263263
new Object[]{cse.getMessage(), cse, cse.getClass().getName()});
264264
errors.add(msg);
@@ -273,14 +273,14 @@ protected void validateSignatures(PKIXParameters pkixParam)
273273
validSignature = signer.verify(new JcaSimpleSignerInfoVerifierBuilder().setProvider("BC").build(cert.getPublicKey()));
274274
if (!validSignature)
275275
{
276-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
276+
ErrorBundle msg = createErrorBundle(
277277
"SignedMailValidator.signatureNotVerified");
278278
errors.add(msg);
279279
}
280280
}
281281
catch (Exception e)
282282
{
283-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
283+
ErrorBundle msg = createErrorBundle(
284284
"SignedMailValidator.exceptionVerifyingSignature",
285285
new Object[]{e.getMessage(), e, e.getClass().getName()});
286286
errors.add(msg);
@@ -296,7 +296,7 @@ protected void validateSignatures(PKIXParameters pkixParam)
296296
Attribute attr = atab.get(PKCSObjectIdentifiers.id_aa_receiptRequest);
297297
if (attr != null)
298298
{
299-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
299+
ErrorBundle msg = createErrorBundle(
300300
"SignedMailValidator.signedReceiptRequest");
301301
notifications.add(msg);
302302
}
@@ -309,7 +309,7 @@ protected void validateSignatures(PKIXParameters pkixParam)
309309
Date signTime = getSignatureTime(signer);
310310
if (signTime == null) // no signing time was found
311311
{
312-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
312+
ErrorBundle msg = createErrorBundle(
313313
"SignedMailValidator.noSigningTime");
314314
notifications.add(msg);
315315
signTime = pkixParam.getDate();
@@ -327,14 +327,14 @@ protected void validateSignatures(PKIXParameters pkixParam)
327327
}
328328
catch (CertificateExpiredException e)
329329
{
330-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
330+
ErrorBundle msg = createErrorBundle(
331331
"SignedMailValidator.certExpired",
332332
new Object[]{new TrustedInput(signTime), new TrustedInput(cert.getNotAfter())});
333333
errors.add(msg);
334334
}
335335
catch (CertificateNotYetValidException e)
336336
{
337-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
337+
ErrorBundle msg = createErrorBundle(
338338
"SignedMailValidator.certNotYetValid",
339339
new Object[]{new TrustedInput(signTime), new TrustedInput(cert.getNotBefore())});
340340
errors.add(msg);
@@ -373,7 +373,7 @@ protected void validateSignatures(PKIXParameters pkixParam)
373373
review.init(certPath, usedParameters);
374374
if (!review.isValidCertPath())
375375
{
376-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
376+
ErrorBundle msg = createErrorBundle(
377377
"SignedMailValidator.certPathInvalid");
378378
errors.add(msg);
379379
}
@@ -383,7 +383,7 @@ protected void validateSignatures(PKIXParameters pkixParam)
383383
catch (GeneralSecurityException gse)
384384
{
385385
// cannot create cert path
386-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
386+
ErrorBundle msg = createErrorBundle(
387387
"SignedMailValidator.exceptionCreateCertPath",
388388
new Object[]{gse.getMessage(), gse, gse.getClass().getName()});
389389
errors.add(msg);
@@ -401,7 +401,7 @@ protected void validateSignatures(PKIXParameters pkixParam)
401401
else
402402
// no signer certificate found
403403
{
404-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
404+
ErrorBundle msg = createErrorBundle(
405405
"SignedMailValidator.noSignerCert");
406406
errors.add(msg);
407407
results.put(signer, new ValidationResult(null, false, errors,
@@ -478,7 +478,7 @@ else if (key instanceof DSAPublicKey)
478478
}
479479
if (keyLength != -1 && keyLength <= shortKeyLength)
480480
{
481-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
481+
ErrorBundle msg = createErrorBundle(
482482
"SignedMailValidator.shortSigningKey",
483483
new Object[]{Integers.valueOf(keyLength)});
484484
notifications.add(msg);
@@ -488,7 +488,7 @@ else if (key instanceof DSAPublicKey)
488488
long validityPeriod = cert.getNotAfter().getTime() - cert.getNotBefore().getTime();
489489
if (validityPeriod > THIRTY_YEARS_IN_MILLI_SEC)
490490
{
491-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
491+
ErrorBundle msg = createErrorBundle(
492492
"SignedMailValidator.longValidity",
493493
new Object[]{new TrustedInput(cert.getNotBefore()), new TrustedInput(cert.getNotAfter())});
494494
notifications.add(msg);
@@ -498,7 +498,7 @@ else if (key instanceof DSAPublicKey)
498498
boolean[] keyUsage = cert.getKeyUsage();
499499
if (keyUsage != null && !keyUsage[0] && !keyUsage[1])
500500
{
501-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
501+
ErrorBundle msg = createErrorBundle(
502502
"SignedMailValidator.signingNotPermitted");
503503
errors.add(msg);
504504
}
@@ -516,15 +516,15 @@ else if (key instanceof DSAPublicKey)
516516
&& !extKeyUsage
517517
.hasKeyPurposeId(KeyPurposeId.id_kp_emailProtection))
518518
{
519-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
519+
ErrorBundle msg = createErrorBundle(
520520
"SignedMailValidator.extKeyUsageNotPermitted");
521521
errors.add(msg);
522522
}
523523
}
524524
}
525525
catch (Exception e)
526526
{
527-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
527+
ErrorBundle msg = createErrorBundle(
528528
"SignedMailValidator.extKeyUsageError", new Object[]{
529529
e.getMessage(), e, e.getClass().getName()}
530530
);
@@ -538,7 +538,7 @@ else if (key instanceof DSAPublicKey)
538538
if (certEmails.isEmpty())
539539
{
540540
// error no email address in signing certificate
541-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
541+
ErrorBundle msg = createErrorBundle(
542542
"SignedMailValidator.noEmailInCert");
543543
errors.add(msg);
544544
}
@@ -557,7 +557,7 @@ else if (key instanceof DSAPublicKey)
557557
}
558558
if (!equalsFrom)
559559
{
560-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
560+
ErrorBundle msg = createErrorBundle(
561561
"SignedMailValidator.emailFromCertMismatch",
562562
new Object[]{
563563
new UntrustedInput(
@@ -570,7 +570,7 @@ else if (key instanceof DSAPublicKey)
570570
}
571571
catch (Exception e)
572572
{
573-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
573+
ErrorBundle msg = createErrorBundle(
574574
"SignedMailValidator.certGetEmailError", new Object[]{
575575
e.getMessage(), e, e.getClass().getName()}
576576
);
@@ -854,7 +854,7 @@ public ValidationResult getValidationResult(SignerInformation signer)
854854
{
855855
// the signer is not part of the SignerInformationStore
856856
// he has not signed the message
857-
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME,
857+
ErrorBundle msg = createErrorBundle(
858858
"SignedMailValidator.wrongSigner");
859859
throw new SignedMailValidatorException(msg);
860860
}
@@ -961,10 +961,25 @@ public boolean isValidSignature()
961961
}
962962
}
963963

964-
965964
private static TBSCertificate getTBSCert(X509Certificate cert)
966965
throws CertificateEncodingException
967966
{
968967
return TBSCertificate.getInstance(cert.getTBSCertificate());
969968
}
969+
970+
private static ErrorBundle createErrorBundle(String id)
971+
{
972+
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME, id);
973+
msg.setClassLoader(SignedMailValidator.class.getClassLoader());
974+
975+
return msg;
976+
}
977+
978+
private static ErrorBundle createErrorBundle(String id, Object[] arguments)
979+
{
980+
ErrorBundle msg = new ErrorBundle(RESOURCE_NAME, id, arguments);
981+
msg.setClassLoader(SignedMailValidator.class.getClassLoader());
982+
983+
return msg;
984+
}
970985
}

0 commit comments

Comments
 (0)