From 7e8efebe4d353a5e65ed3d7a6049c831add3b2ce Mon Sep 17 00:00:00 2001 From: "Timo K." Date: Sun, 30 Aug 2026 12:38:04 +0200 Subject: [PATCH] Fix crash due to JSON.stringify on a cirular structure in injectes js. --- .../utils/WebViewWidgetMessageInterceptor.kt | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/WebViewWidgetMessageInterceptor.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/WebViewWidgetMessageInterceptor.kt index c74ae90abd..3e1aa015d0 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/WebViewWidgetMessageInterceptor.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/WebViewWidgetMessageInterceptor.kt @@ -54,10 +54,28 @@ class WebViewWidgetMessageInterceptor( // objects in log lines. view.evaluateJavascript( """ + // Removing any parts that result in a circular structure. Circular structures crash JSON.stringify. + function simpleStringify(object) { + const simpleObject = {}; + for (const prop in object) { + if (!object.hasOwnProperty(prop)) { + continue; + } + if (typeof(object[prop]) == 'object') { + continue; + } + if (typeof(object[prop]) == 'function') { + continue; + } + simpleObject[prop] = object[prop]; + } + return JSON.stringify(simpleObject); + } + function logFn(consoleLogFn, ...args) { consoleLogFn( args.map( - a => typeof a === "string" ? a : JSON.stringify(a) + a => typeof a === "string" ? a : simpleStringify(a) ).join(' ') ); };