From 9d902f6406ef18b8b506a7ebc10793fe8dfa1efc Mon Sep 17 00:00:00 2001 From: Rishabh Venu Date: Sat, 10 Oct 2026 05:08:08 -0400 Subject: [PATCH] fix(command): handle accounts without an email in /authme email GetEmailCommand passed the stored email straight to the admin.email_show message. For an account that has no email the value is null, so Messages.retrieveSingle threw a NullPointerException and the sender only got "An unexpected error occurred". Check the value with Utils.isEmailEmpty, as /email show does, and send the existing email.no_email_for_account message in that case. Fixes #3091 --- .../command/executable/authme/GetEmailCommand.java | 9 ++++++--- .../executable/authme/GetEmailCommandTest.java | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/authme-core/src/main/java/fr/xephi/authme/command/executable/authme/GetEmailCommand.java b/authme-core/src/main/java/fr/xephi/authme/command/executable/authme/GetEmailCommand.java index 48c06322e5..f5026c8b01 100644 --- a/authme-core/src/main/java/fr/xephi/authme/command/executable/authme/GetEmailCommand.java +++ b/authme-core/src/main/java/fr/xephi/authme/command/executable/authme/GetEmailCommand.java @@ -5,6 +5,7 @@ import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.service.CommonService; +import fr.xephi.authme.util.Utils; import org.bukkit.command.CommandSender; import javax.inject.Inject; @@ -26,10 +27,12 @@ public void executeCommand(CommandSender sender, List arguments) { String playerName = arguments.isEmpty() ? sender.getName() : arguments.get(0); DataSourceValue email = dataSource.getEmail(playerName); - if (email.rowExists()) { - commonService.send(sender, MessageKey.ADMIN_EMAIL_SHOW, playerName, email.getValue()); - } else { + if (!email.rowExists()) { commonService.send(sender, MessageKey.UNKNOWN_USER); + } else if (Utils.isEmailEmpty(email.getValue())) { + commonService.send(sender, MessageKey.SHOW_NO_EMAIL); + } else { + commonService.send(sender, MessageKey.ADMIN_EMAIL_SHOW, playerName, email.getValue()); } } } diff --git a/authme-core/src/test/java/fr/xephi/authme/command/executable/authme/GetEmailCommandTest.java b/authme-core/src/test/java/fr/xephi/authme/command/executable/authme/GetEmailCommandTest.java index f1963bf225..8194194bf1 100644 --- a/authme-core/src/test/java/fr/xephi/authme/command/executable/authme/GetEmailCommandTest.java +++ b/authme-core/src/test/java/fr/xephi/authme/command/executable/authme/GetEmailCommandTest.java @@ -61,4 +61,18 @@ void shouldReturnEmail() { // then verify(service).send(eq(sender), eq(MessageKey.ADMIN_EMAIL_SHOW), eq(user), eq(email)); } + + @Test + void shouldReportMissingEmail() { + // given + String user = "userWithoutEmail"; + given(dataSource.getEmail(user)).willReturn(DataSourceValueImpl.of(null)); + CommandSender sender = mock(CommandSender.class); + + // when + command.executeCommand(sender, Collections.singletonList(user)); + + // then + verify(service).send(sender, MessageKey.SHOW_NO_EMAIL); + } }