buffer.toString() fails when buffer.length >= 32 and null-terminated on big-endian
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 122k
- Forks
- 37.3k
- Ø Merge
- 4 T. 2 Std.
- Gemergte PRs (30 T.)
- 283
Beschreibung
Version
v24.18.0, v26.5.0
Platform
Linux zelenka 6.12.96+deb13-s390x #1 SMP Debian 6.12.96-1 (2026-07-20) s390x GNU/Linux
Subsystem
StringBytes
What steps will reproduce the bug?
Run these commands
node -p 'const b=Buffer.alloc(32); b.write("\u3000",0,"utf8");b.toString().charCodeAt(0);'
node -p 'Buffer.from("\u3000").toString().charCodeAt(0);'
How often does it reproduce? Is there a required condition?
Always reproduced on big-endian.
What is the expected behavior? Why is that the expected behavior?
both commands should return 12288
What do you see instead?
On big-endian architecture (e.g. s390x) the first call returns 0 and the last 12288.
Additional information
Tested with the executables provided by nodejs.org.
v22.23.1 is not affected.
Also, this gives the correct result on big-endian:
node -p 'const b=Buffer.alloc(31); b.write("\u3000",0,"utf8");b.toString().charCodeAt(0);'
So the suspected commits are the ones adding the special cases for buflen >= 32 here:
https://github.com/nodejs/node/blob/68130800586634f17812f3b0837d869a36725e98/src/string_bytes.cc#L751
and here
https://github.com/nodejs/node/blob/68130800586634f17812f3b0837d869a36725e98/src/string_bytes.cc#L625
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Führen Sie die beiden Reproduktionsbefehle auf einem Big-Endian-System aus und vergleichen Sie sie mit dem Fall mit 31 Byte. Untersuchen Sie anschließend src/string_bytes.cc im Umfeld der referenzierten Zeilen 625 und 751 und konzentrieren Sie sich auf die spezielle Behandlung von buflen >= 32. Erledigt ist die Aufgabe, wenn beide Befehle auf Big-Endian 12288 zurückgeben, ohne das bestehende Verhalten für 31 Byte zu beeinträchtigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- cpp, nodejs
- Bereich
- backend, operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 68/100