Open
Description
New Issue Checklist
- I am not disclosing a vulnerability.I am not just asking a question.I have searched through existing issues.I can reproduce the issue with the latest versions of Parse Server and the Parse JS SDK.
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 with VERBOSE=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:
- Give further context about where the error is coming from
- Have a limit on the number of calls within the function and truncate after the limit is hit, giving a warning in the console but not causing the program to error out
Environment
Server
- Parse Server version:
7.0.0
- Operating system:
node:18 Docker image
- Local or remote host (AWS, Azure, Google Cloud, Heroku, Digital Ocean, etc):
Local
Database
- System (MongoDB or Postgres):
MongoDB
- Database version:
5.9.2
- Local or remote host (MongoDB Atlas, mLab, AWS, Azure, Google Cloud, etc):
Local
Client
- Parse JS SDK version:
5.0.0
Logs
An uncaught exception occurred: Maximum call stack size exceededStack Trace:
RangeError: Maximum call stack size exceeded
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:23:16)
at /api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:61:14
at Array.map (<anonymous>)
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:60:18)
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:67:19)
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:67:19)
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:67:19)
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:67:19)
at encode (/api/node_modules/.pnpm/parse@5.0.0/node_modules/parse/lib/node/encode.js:67:19)
Activity
parse-github-assistant commentedon Mar 24, 2024
Thanks for opening this issue!
mtrezza commentedon Mar 24, 2024
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
n
iterations, whatever we decide a reasonablen
to be, causing the calling method to fail and produce an error. To determine a reasonablen
we would need to better understand in which cases a recursive calling happens.As to your specific case, if you add a limit with
n
say1000
and then let the calling op fail and log a detailed error, then you would also know what was causing this. Such a limit should be easy to implement. If you open a PR, then we can release it as alpha version, you can test it out in production and see what's causing this.encode.js
#2099dplewis commentedon Mar 29, 2024
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.
Merge branch 'alpha' into fix/parse-community#2098
ajmeese7 commentedon Apr 3, 2024
Whenever I used the logging currently added in the PR, this is the output I got:
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:
And the next run's output was
Value causing potential infinite recursion: 266328
, which again provides very little information and no valuable intel to act on.mtrezza commentedon Apr 3, 2024
I'd like to point to my comment. Maybe it makes sense to properly handle circular references, instead of causing a stack overflow.
Merge branch 'alpha' into fix/parse-community#2098