Переглянути джерело

Fix: Wrap decode in try catch

Neeraj Gupta 2 роки тому
батько
коміт
bf86dac10f
1 змінених файлів з 13 додано та 4 видалено
  1. 13 4
      lib/ui/code_widget.dart

+ 13 - 4
lib/ui/code_widget.dart

@@ -11,6 +11,7 @@ import 'package:ente_auth/utils/toast_util.dart';
 import 'package:ente_auth/utils/totp_util.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_slidable/flutter_slidable.dart';
+import 'package:logging/logging.dart';
 
 class CodeWidget extends StatefulWidget {
   final Code code;
@@ -25,6 +26,7 @@ class _CodeWidgetState extends State<CodeWidget> {
   Timer? _everySecondTimer;
   final ValueNotifier<String> _currentCode = ValueNotifier<String>("");
   final ValueNotifier<String> _nextCode = ValueNotifier<String>("");
+  final Logger logger = Logger("_CodeWidgetState");
 
   @override
   void initState() {
@@ -124,15 +126,13 @@ class _CodeWidgetState extends State<CodeWidget> {
                                 crossAxisAlignment: CrossAxisAlignment.start,
                                 children: [
                                   Text(
-                                    Uri.decodeFull(widget.code.issuer).trim(),
+                                    safeDecode(widget.code.issuer).trim(),
                                     style:
                                         Theme.of(context).textTheme.headline6,
                                   ),
                                   const SizedBox(height: 2),
                                   Text(
-                                    Uri.decodeFull(
-                                      widget.code.account,
-                                    ).trim(),
+                                    safeDecode(widget.code.account).trim(),
                                     style: Theme.of(context)
                                         .textTheme
                                         .caption
@@ -277,6 +277,15 @@ class _CodeWidgetState extends State<CodeWidget> {
     );
   }
 
+  String safeDecode(String value) {
+    try {
+      return Uri.decodeComponent(value);
+    } catch (e) {
+      logger.info("Failed to decode $value");
+      return value;
+    }
+  }
+
   String _getTotp() {
     try {
       return getTotp(widget.code);