瀏覽代碼

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