App: [HOLD for payment 2023-01-04] [$500] Investigate: 💥 Crash 💥 `.stringify`

Firebase has reported a new crash that we need to fix, here are all the details we found:

Fatal Exception: io.invertase.firebase.crashlytics.JavaScriptError

String length exceeds limit

(native):0:0 .stringify

Number of Crashes: 2

Device Information

  • Platforms: iOS, Android
  • App Versions: 1.2.2-0, 1.2.4.1
  • Devices: Apple iPhone14,2 16.0.0, Google Pixel 5 13

Stacktraces

iOS 1.2.4.1

stringify
logToServer (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:100353:36:100353)
add (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:100384:27:100384)
info (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:100394:17:100394)
anonymous (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:181727:24:181727)
anonymous (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:42960:28:42960)
apply
emit (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:2526:42:2526)
apply
__callFunction (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:3249:36:3249)
anonymous (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:3070:31:3070)
__guard (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:3200:15:3200)
callFunctionReturnFlushedQueue (/Users/runner/Library/Developer/Xcode/DerivedData/NewExpensify-hgyiprpybmjyfbgfhddtlxzmjjny/Build/Intermediates.noindex/ArchiveIntermediates/NewExpensify/BuildProductsPath/Release-iphoneos/main.jsbundle:3069:21:3069)
Android 1.2.2-0
.stringify
.logToServer
.add
.info
.anonymous
.anonymous
.apply
.emit
.apply
.__callFunction
.anonymous
.__guard
.callFunctionReturnFlushedQueue

Internal Firebase Info

💥 DO NOT EDIT THIS SECTION 💥

Crash IDs: 1b22fb5d7340690da39837332fac7c8e, 38fadb03e3c707229f932124d7399aec Exception: String length exceeds limit

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 39 (33 by maintainers)

Most upvoted comments

Hmm, I still didn’t get how it causing the issue with the details provided by you. I will debug it myself to understand it.

well, deprecatedAPI turned on Logging middleware for all network requests including those that are used in Logging middleware itself

I propose following patch to get rid of this

diff --git a/src/libs/Middleware/Logging.js b/src/libs/Middleware/Logging.js
index 4586eeb2a8..665aa18efb 100644
--- a/src/libs/Middleware/Logging.js
+++ b/src/libs/Middleware/Logging.js
@@ -55,6 +55,11 @@ function Logging(response, request) {
         .catch((error) => {
             const persisted = lodashGet(request, 'data.persist');

+            // Don't log about log or else we'd cause an infinite loop
+            if (request.command === 'Log') { 
+                throw error; 
+            }
+
             // Cancelled requests are normal and can happen when a user logs out. No extra handling is needed here besides
             // remove the request from the PersistedRequests if the request exists.
             if (error.name === CONST.ERROR.REQUEST_CANCELLED) {

@parasharrajat what do you think?

I’m running into this in my local environment so I am going to reopen this. It happens on the front-end: image

The problem must be that we fail to log, and then we log that we fail to log, and that fails again, so it goes into this near-infinite loop. I think we should find the root cause of this and stop the loop from happening.