]> nmode's Git Repositories - signal-cli/commitdiff
Prevent sending invalid locale to server
authorAsamK <asamk@gmx.de>
Fri, 21 May 2021 13:38:11 +0000 (15:38 +0200)
committerAsamK <asamk@gmx.de>
Fri, 21 May 2021 13:38:11 +0000 (15:38 +0200)
lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java

index 88cba97bc475436306a2362b26ee5f0c829fbaed..0ebde3c208ff03864a2b247a00d372eec3cc97f7 100644 (file)
@@ -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.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;
 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 {
 
 
 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;
     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) {
 
     public void register(boolean voiceVerification, String captcha) throws IOException {
         if (voiceVerification) {
-            accountManager.requestVoiceVerificationCode(Locale.getDefault(),
+            accountManager.requestVoiceVerificationCode(getDefaultLocale(),
                     Optional.fromNullable(captcha),
                     Optional.absent());
         } else {
                     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 {
     public Manager verifyAccount(
             String verificationCode, String pin
     ) throws IOException, LockedException, KeyBackupSystemNoDataException, KeyBackupServicePinException {