Skip to content

[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

@ppjohnson

Description

@ppjohnson

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions