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

Commit fee88a4b authored by cketti's avatar cketti
Browse files

Write empty string to identity header field if name is null

parent fdc9052a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
package com.fsck.k9.message;


import java.util.Objects;

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

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

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

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

import android.net.Uri
import app.k9mail.core.android.testing.RobolectricTest
import assertk.Assert
import assertk.assertThat
import assertk.assertions.contains
import assertk.assertions.isGreaterThan
import com.fsck.k9.Account.QuoteStyle
import com.fsck.k9.Identity
@@ -35,6 +38,21 @@ class IdentityHeaderBuilderTest : RobolectricTest() {
        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) {
        try {
            MimeHeaderChecker.checkHeader(IDENTITY_HEADER, identityHeader)
@@ -55,3 +73,11 @@ class IdentityHeaderBuilderTest : RobolectricTest() {
        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 "), "")
}