-
Notifications
You must be signed in to change notification settings - Fork 4.1k
[flutterfire_internals 1.3.68,firebase_app_check 0.4.x]: < _testException in _flutterfire_internals crashes with TypeError when non-JS Dart exception propagates on web (Flutter 3.41.x)> #18176
Description
Is there an existing issue for this?
- I have searched the existing issues.
Which plugins are affected?
App Check
Which platforms are affected?
Web
Description
_flutterfire_internals/lib/_flutterfire_internals.dart line 94 does a forced cast:
final exception = objectException! as core_interop.JSError; // throws if not JS
Should be a safe check:
if (objectException is! core_interop.JSError) return false;
Reproducing the issue
Call FirebaseAppCheck.instance.activate() on web without a webProvider. The resulting ArgumentError propagates through FlutterFire's catchError, hits
_testException, and crashes the app with TypeError: type 'ArgumentError' is not a subtype of type 'JavaScriptObject'.
Firebase Core version
4.6.0
Flutter Version
3.41.6
Relevant Log Output
Flutter dependencies
Expand Flutter dependencies snippet
Replace this line with the contents of your `flutter pub deps -- --style=compact`.
Additional context and comments
DDC is about to load 1/2 scripts with pool size = 1000
ddc_module_loader.js:1015 DDC is about to load 1475/1475 scripts with pool size = 1000
ddc_module_loader.js:1586 Starting application from main method in: org-dartlang-app:/web_entrypoint.dart.
js_primitives.dart:28 Got object store box in database pending_uploads.
js_primitives.dart:28 🔥 Uncaught zone error: Invalid argument(s): A WebProvider is required for activate() to initialise App Check on the web platform
js_primitives.dart:28 dart-sdk/lib/internal/js_dev_runtime/private/ddc_runtime/errors.dart 274:3 throw
js_primitives.dart:28 package:firebase_app_check_web/src/interop/app_check.dart 44:5 getAppCheckInstance
js_primitives.dart:28 package:firebase_app_check_web/firebase_app_check_web.dart 159:42
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 623:19
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 648:23
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 542:3 _asyncStartSync
js_primitives.dart:28 package:firebase_app_check_web/firebase_app_check_web.dart 161:7
js_primitives.dart:28 package:_flutterfire_internals/_flutterfire_internals.dart 136:21 guardWebExceptions
js_primitives.dart:28 package:firebase_app_check_web/src/internals.dart 12:20 convertWebExceptions
js_primitives.dart:28 package:firebase_app_check_web/firebase_app_check_web.dart 158:12
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 623:19
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 648:23
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 542:3 _asyncStartSync
js_primitives.dart:28 package:firebase_app_check_web/firebase_app_check_web.dart 121:16 activate
js_primitives.dart:28 package:firebase_app_check/src/firebase_app_check.dart 93:22 activate
js_primitives.dart:28 package:spot_health/main.dart 22:37
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 623:19
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 648:23
… +48 lines …
complete
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 571:12 _asyncReturn
js_primitives.dart:28 package:hive/src/backend/js/native/storage_backend_js.dart 166:3
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 623:19
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 648:23
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 594:19
js_primitives.dart:28 dart-sdk/lib/async/zone_root.dart 48:47 _rootRunUnary
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77 tear
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 733:19 runUnary
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 222:18 handleValue
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 948:44 handleValueCallback
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 977:13 _propagateToListeners
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 720:5 [_completeWithValue]
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 804:7
js_primitives.dart:28 dart-sdk/lib/async/zone_root.dart 35:13 _rootRun
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77 tear
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 726:19 run
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 625:7 runGuarded
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 666:23
js_primitives.dart:28 dart-sdk/lib/async/schedule_microtask.dart 40:34 _microtaskLoop
js_primitives.dart:28 dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 118:77 tear
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 188:69