-
-
Notifications
You must be signed in to change notification settings - Fork 596
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Infinite loop in encode.js
#2098
Comments
Thanks for opening this issue!
|
Not sure about warning; this is such a general method that encodes a Parse Object; we wouldn't know what exactly the effect is if we just "truncate" the encoding of an object. I believe encoding should fail after As to your specific case, if you add a limit with |
I have run into this issue as well returning objects from a certain API in Cloud Code functions. I deconstructed the object manually or find if the object has a toJSON() function and return it. In cloud code you can basically return anything. If it happens to be to an object with circular references then you will run into this issue.
|
Whenever I used the logging currently added in the PR, this is the output I got: 2024-04-03 10:51:12 Encoding object failed due to high number of recursive calls, likely caused by circular reference within object.
2024-04-03 10:51:12 Value causing potential infinite recursion: 4184
2024-04-03 10:51:12 Disallow objects: false
2024-04-03 10:51:12 Force pointers: false
2024-04-03 10:51:12 Seen: []
2024-04-03 10:51:12 Offline: undefined
2024-04-03 10:51:12 An uncaught exception occurred: Encoding object failed due to high number of recursive calls, likely caused by circular reference within object.Stack Trace:
2024-04-03 10:51:12 Error: Encoding object failed due to high number of recursive calls, likely caused by circular reference within object.
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:34:11)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19)
2024-04-03 10:51:12 at encode (/api/node_modules/.pnpm/[email protected]/node_modules/parse/lib/node/encode.js:79:19) Does this make sense to you at all? I'm not sure why some number would cause this issue, or if that's just the console doing a bad job of stringifying whatever the object in question is. In case it was the stringifying, I changed the print code to: console.error('Value causing potential infinite recursion:', JSON.stringify(value, null, 4)); And the next run's output was |
I'd like to point to my comment. Maybe it makes sense to properly handle circular references, instead of causing a stack overflow. |
New Issue Checklist
Issue Description
The
encode
function is called recursively without a ceiling, causing the entire service to crash with no hint as to the originating call, even withVERBOSE=1
enabled. All I know is that the error is thrown from this line:if (value && typeof value === 'object') { const output = {}; for (const k in value) { + output[k] = encode(value[k], disallowObjects, forcePointers, seen, offline); } return output; }
Steps to reproduce
Unsure, inherited legacy code and there is no hint as to which network call is causing this issue.
Actual Outcome
Program errors out without any hint as to where the error is coming from.
Expected Outcome
The function to execute properly. Two possible improvements to the library come to mind:
Environment
Server
7.0.0
node:18 Docker image
Local
Database
MongoDB
5.9.2
Local
Client
5.0.0
Logs
The text was updated successfully, but these errors were encountered: