Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix for JENKINS-12577- prevent dereferencing null default subject and…
… body fields + plus unit test
  • Loading branch information
hajush committed Apr 6, 2012
1 parent 4053bda commit 9037676
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
20 changes: 17 additions & 3 deletions src/main/java/hudson/plugins/emailext/plugins/ContentBuilder.java
Expand Up @@ -63,14 +63,28 @@ public static Collection<EmailContent> getEmailContentTypes() {
return EMAIL_CONTENT_TYPE_MAP.values();
}

private String noNull(String string) {
return string == null ? "" : string;
}

public String transformText(String origText, ExtendedEmailPublisher publisher, EmailType type, AbstractBuild<?, ?> build) {
String recipientList = publisher.recipientList == null ? "" : publisher.recipientList;
String newText = origText.replaceAll(PROJECT_DEFAULT_BODY, Matcher.quoteReplacement(publisher.defaultContent)).replaceAll(PROJECT_DEFAULT_SUBJECT, Matcher.quoteReplacement(publisher.defaultSubject)).replaceAll(DEFAULT_BODY, Matcher.quoteReplacement(ExtendedEmailPublisher.DESCRIPTOR.getDefaultBody())).replaceAll(DEFAULT_SUBJECT, Matcher.quoteReplacement(ExtendedEmailPublisher.DESCRIPTOR.getDefaultSubject())).replaceAll(DEFAULT_RECIPIENTS, Matcher.quoteReplacement(ExtendedEmailPublisher.DESCRIPTOR.getDefaultRecipients()));
String defaultContent = Matcher.quoteReplacement(noNull(publisher.defaultContent));
String defaultSubject = Matcher.quoteReplacement(noNull(publisher.defaultSubject));
String defaultBody = Matcher.quoteReplacement(noNull(ExtendedEmailPublisher.DESCRIPTOR.getDefaultBody()));
String defaultExtSubject = Matcher.quoteReplacement(noNull(ExtendedEmailPublisher.DESCRIPTOR.getDefaultSubject()));
String defaultRecipients = Matcher.quoteReplacement(noNull(ExtendedEmailPublisher.DESCRIPTOR.getDefaultRecipients()));
String newText = origText.replaceAll(
PROJECT_DEFAULT_BODY, defaultContent).replaceAll(
PROJECT_DEFAULT_SUBJECT, defaultSubject).replaceAll(
DEFAULT_BODY, defaultBody).replaceAll(
DEFAULT_SUBJECT, defaultExtSubject).replaceAll(
DEFAULT_RECIPIENTS, defaultRecipients);
newText = replaceTokensWithContent(newText, publisher, type, build);
return newText;
}

private static <P extends AbstractProject<P, B>, B extends AbstractBuild<P, B>> String replaceTokensWithContent(String origText, ExtendedEmailPublisher publisher, EmailType type, AbstractBuild<P, B> build) {
private static <P extends AbstractProject<P, B>, B extends AbstractBuild<P, B>> String replaceTokensWithContent(
String origText, ExtendedEmailPublisher publisher, EmailType type, AbstractBuild<P, B> build) {
StringBuffer sb = new StringBuffer();
Tokenizer tokenizer = new Tokenizer(origText);

Expand Down
Expand Up @@ -202,4 +202,15 @@ public void testTokenizer12() {
new ContentBuilder().transformText( "${DEFAULT_RECIPIENTS}", publisher, null,
mock( AbstractBuild.class ) ) );
}
public void testTransformText_noNPEWithNullDefaultSubjectBody() throws NoSuchFieldException, IllegalAccessException
{
Field f = ExtendedEmailPublisherDescriptor.class.getDeclaredField( "defaultBody" );
f.setAccessible( true );
f.set( ExtendedEmailPublisher.DESCRIPTOR, null );
f = ExtendedEmailPublisherDescriptor.class.getDeclaredField( "defaultSubject" );
f.setAccessible( true );
f.set( ExtendedEmailPublisher.DESCRIPTOR, null );
assertEquals( "", new ContentBuilder().transformText( "$DEFAULT_SUBJECT", publisher, null, mock (AbstractBuild.class )));
assertEquals( "", new ContentBuilder().transformText( "$DEFAULT_CONTENT", publisher, null, mock (AbstractBuild.class )));
}
}

0 comments on commit 9037676

Please sign in to comment.