Repository navigation
UTF+8 encodings are broken #54543
Copy link
Copy link
Closed
Labels
bufferIssues and PRs related to the buffer subsystem.Issues and PRs related to the buffer subsystem.confirmed-bugIssues and PRs for confirmed bugs.Issues and PRs for confirmed bugs.regressionIssues related to regressions.Issues related to regressions.v22.xIssues that can be reproduced on v22.x or PRs targeting the v22.x-staging branch.Issues that can be reproduced on v22.x or PRs targeting the v22.x-staging branch.
Description
Version
22.7.0
Platform
Linux api-deployment-694785c9f5-8dd8j 5.10.223-211.872.amzn2.x86_64 #1 SMP Mon Jul 29 19:52:29 UTC 2024 x86_64 GNU/Linux
Subsystem
No response
What steps will reproduce the bug?
Hey everyone, I'm not sure how to reproduce but latest node can't parse UTF+8 anymore. It works for the first minute or two (or couple hours if I remove Datadog APM instrumentation) but then returns garbage on the same request. I'm just using postgres.js to fetch and nest.js for the HTTP server. No fancy buffer manipulation.
curl --location 'https://api.vapi.ai/assistant/205deb59-755c-489c-8879-7523b1318ed8' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer XXXXXX'
{"id":"205deb59-755c-489c-8879-7523b1318ed8","orgId":"7616920b-4696-458b-a2aa-3453fd13ace4","name":"éñüç߯","createdAt":"2024-08-24T08:58:16.110Z","updatedAt":"2024-08-24T08:58:16.110Z","isServerUrlSecretSet":false}%
## 2 minutes later
curl --location 'https://api.vapi.ai/assistant/205deb59-755c-489c-8879-7523b1318ed8' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer XXXXXX'
{"id":"205deb59-755c-489c-8879-7523b1318ed8","orgId":"7616920b-4696-458b-a2aa-3453fd13ace4","name":"������","createdAt":"2024-08-24T08:58:16.110Z","updatedAt":"2024-08-24T08:58:16.110Z","isServerUrlSecretSet":false}%
Note how éñüç߯ gets corrupted.
How often does it reproduce? Is there a required condition?
Restart the process, it works for sometime and then corrupts itself.
What is the expected behavior? Why is that the expected behavior?
It should keep returning the current text.
What do you see instead?
Garbage text
Additional information
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bufferIssues and PRs related to the buffer subsystem.Issues and PRs related to the buffer subsystem.confirmed-bugIssues and PRs for confirmed bugs.Issues and PRs for confirmed bugs.regressionIssues related to regressions.Issues related to regressions.v22.xIssues that can be reproduced on v22.x or PRs targeting the v22.x-staging branch.Issues that can be reproduced on v22.x or PRs targeting the v22.x-staging branch.
Activity
nikhilro commentedon Aug 24, 2024
Update: UTF+8 is fine. It's specifically on ASCII extended set.
I tried other versions:
Our best guess is ASCII extended set UTF-8 encoded vs normal ASCII extended set are getting mixed up and corrupted
nikhilro commentedon Aug 24, 2024
cc @ronag if you have any ideas.
found 3 commits related to encoding:
avivkeller commentedon Aug 24, 2024
Hi! v22.7.0 has a few known buffer issues, so could you provide a minimal reproduction so the issue can be narrowed down?
Additionally, could you self-moderate your comment containing curse-words, as it may be offensive to some viewers?
Edit: Thanks!
Possibly a duplicate of: #54521
ronag commentedon Aug 24, 2024
Can you check if this fixes it? #54526
nikhilro commentedon Aug 24, 2024
@redyetidev
@ronag
Thanks for confirming both. I'll rollback to 22.6.0 for now.
sharpner commentedon Aug 26, 2024
We also ran into this issue, took us forever to find the culprit
We reproduced it by having a simple express http handler deployed on amazon app runner:
Further Info:
node 22.6 seems not to be affected, but 22.7 is
eugene1g commentedon Aug 26, 2024
I'm seeing this show up as failed PostgreSQL queries that contain an umlaut as a parameter, with a cryptic-looking error:
Further, I couldn't reproduce it on Apple silicon, but it fails reliably on Linux.edit: the test case provided by @blexrob fails reliably in 22.7.0 on both Apple Silicon and Linux (22.6.0 works as expected)
avivkeller commentedon Aug 26, 2024
I'd like to remind everyone that "me too" comments only add noise to this already noisy topic. Please refrain from commenting until you have something to add to the conversation
Edit: this isn't directed at any comments. This is meant to deter future "me too" comments, as they occur often with issues like this.
avivkeller commentedon Aug 26, 2024
I feel like one of the patches in v22.8.0 (#54560), when it lands, will resolve this issue. Once that lands, please post a comment whether it resolves this issue. Given it's current state, that could be a few days.
aapoalas commentedon Aug 27, 2024
I assume you have already tracked this down, but I believe the issue is basically:
FastWriteString(I'm only guessing this is the API in question, but it is likely the one) gets the call and incorrectly assumes that thev8::FastOneByteStringit is given is ASCII: This is not the case,OneByteStringis Latin-1 encoded.avivkeller commentedon Aug 27, 2024
#54565 will fix this issue for the v22.8.0 release. Then, #54526 (and similar) will be evaluated for a future release.
When #54565 lands, I'll close this issue
devronhansen commentedon Aug 28, 2024
This kept us up a couple of nights. Thank you for fixing it!
Bytt fra chainguard til distroless image
Bytt fra chainguard til distroless image
adriano-tirloni commentedon Aug 28, 2024
I am not familiar with the internals of node, but I just lost a few days because of this.
I could not replicate efficiently because it takes a while to happen.
What gave it away was that the same request lifecycle returned intact UTF-8 string to the browser and corrupted UTF-8 to the logger service, which spins up a new worker for log transport.
avivkeller commentedon Aug 29, 2024
This PR has landed. Expect the release to follow shortly:
SimonX200 commentedon Aug 31, 2024
I hope that the test coverage gets improved with the fix in 22.8
cbratschi commentedon Sep 4, 2024
Did this land in 22.8.0? Could not find it in the release notes:
https://nodejs.org/en/blog/release/v22.8.0
avivkeller commentedon Sep 4, 2024
nicholas-long commentedon Nov 5, 2024
if this broke your data when saving to mongo, here is a script to help fix it: https://github.com/nicholas-long/mongo-node-fix-54543
chore: ensure node 22 version is 22.8 or above
chore: ensure node 22 version is 22.8 or above