From: AsamK Date: Fri, 21 May 2021 13:38:11 +0000 (+0200) Subject: Prevent sending invalid locale to server X-Git-Tag: v0.8.4~22 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/bfd6b605e9bb285bba430197f381eb7ca84a0530?ds=sidebyside Prevent sending invalid locale to server --- diff --git a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java index 88cba97b..0ebde3c2 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java @@ -22,6 +22,8 @@ import org.asamk.signal.manager.config.ServiceEnvironmentConfig; import org.asamk.signal.manager.helper.PinHelper; import org.asamk.signal.manager.storage.SignalAccount; import org.asamk.signal.manager.util.KeyUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.whispersystems.libsignal.util.KeyHelper; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.KeyBackupServicePinException; @@ -45,6 +47,8 @@ import java.util.Locale; public class RegistrationManager implements Closeable { + private final static Logger logger = LoggerFactory.getLogger(RegistrationManager.class); + private SignalAccount account; private final PathConfig pathConfig; private final ServiceEnvironmentConfig serviceEnvironmentConfig; @@ -114,7 +118,7 @@ public class RegistrationManager implements Closeable { public void register(boolean voiceVerification, String captcha) throws IOException { if (voiceVerification) { - accountManager.requestVoiceVerificationCode(Locale.getDefault(), + accountManager.requestVoiceVerificationCode(getDefaultLocale(), Optional.fromNullable(captcha), Optional.absent()); } else { @@ -122,6 +126,18 @@ public class RegistrationManager implements Closeable { } } + private Locale getDefaultLocale() { + final var locale = Locale.getDefault(); + try { + Locale.LanguageRange.parse(locale.getLanguage() + "-" + locale.getCountry()); + } catch (IllegalArgumentException e) { + logger.debug("Invalid locale, ignoring: {}", locale); + return null; + } + + return locale; + } + public Manager verifyAccount( String verificationCode, String pin ) throws IOException, LockedException, KeyBackupSystemNoDataException, KeyBackupServicePinException {