Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit f35603e1 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #7115 from thundernest/fix_IdentityHeaderBuilder

Write empty string to identity header field if name is null
parents 5cb765f1 fee88a4b
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
package com.fsck.k9.message;
package com.fsck.k9.message;




import java.util.Objects;

import android.net.Uri;
import android.net.Uri;
import android.net.Uri.Builder;
import android.net.Uri.Builder;


@@ -87,7 +89,7 @@ public class IdentityHeaderBuilder {
        }
        }


        if (identityChanged) {
        if (identityChanged) {
            appendValue(IdentityField.NAME, identity.getName());
            appendValue(IdentityField.NAME, Objects.requireNonNullElse(identity.getName(), ""));
            appendValue(IdentityField.EMAIL, identity.getEmail());
            appendValue(IdentityField.EMAIL, identity.getEmail());
        }
        }


+26 −0
Original line number Original line Diff line number Diff line
package com.fsck.k9.message
package com.fsck.k9.message


import android.net.Uri
import app.k9mail.core.android.testing.RobolectricTest
import app.k9mail.core.android.testing.RobolectricTest
import assertk.Assert
import assertk.assertThat
import assertk.assertThat
import assertk.assertions.contains
import assertk.assertions.isGreaterThan
import assertk.assertions.isGreaterThan
import com.fsck.k9.Account.QuoteStyle
import com.fsck.k9.Account.QuoteStyle
import com.fsck.k9.Identity
import com.fsck.k9.Identity
@@ -35,6 +38,21 @@ class IdentityHeaderBuilderTest : RobolectricTest() {
        assertIsValidHeader(identityHeader)
        assertIsValidHeader(identityHeader)
    }
    }


    @Test
    fun `identity header without identity name`() {
        val identityHeader = IdentityHeaderBuilder()
            .setIdentity(createIdentity(email = "test@domain.example", name = null))
            .setIdentityChanged(true)
            .setBody(TextBody("irrelevant"))
            .setQuoteStyle(QuoteStyle.PREFIX)
            .setMessageFormat(SimpleMessageFormat.TEXT)
            .setQuoteTextMode(QuotedTextMode.NONE)
            .build()

        assertThat(identityHeader).containsParameter(IdentityField.EMAIL, "test@domain.example")
        assertThat(identityHeader).containsParameter(IdentityField.NAME, "")
    }

    private fun assertIsValidHeader(identityHeader: String) {
    private fun assertIsValidHeader(identityHeader: String) {
        try {
        try {
            MimeHeaderChecker.checkHeader(IDENTITY_HEADER, identityHeader)
            MimeHeaderChecker.checkHeader(IDENTITY_HEADER, identityHeader)
@@ -55,3 +73,11 @@ class IdentityHeaderBuilderTest : RobolectricTest() {
        return Identity(description, name, email, signature, signatureUse, replyTo)
        return Identity(description, name, email, signature, signatureUse, replyTo)
    }
    }
}
}

private fun Assert<String>.containsParameter(identityField: IdentityField, value: String) = given { actual ->
    assertThat("&${unfold(actual)}&").contains("&${identityField.value()}=${Uri.encode(value)}&")
}

private fun unfold(headerValue: String): String {
    return headerValue.replace(Regex("\r?\n "), "")
}