Nonsense UNKNOWN error when writing large buffers with fs.writev
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
14.18.1
Platform
Linux ops 5.11.0-1021-gcp #23~20.04.1-Ubuntu SMP Fri Oct 1 19:04:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linu
Subsystem
fs
What steps will reproduce the bug?
const fs = require("fs");
const fd = fs.openSync("./test.dat", fs.constants.O_WRONLY | fs.constants.O_CREAT, 0o666);
const bufs = [Buffer.alloc(0x7FFFFFFF + 1)];
fs.writevSync(fd, bufs, 0);
This throws
Uncaught Error: UNKNOWN: unknown error, write
at Object.writevSync (fs.js:749:3) {
errno: -2147483648,
syscall: 'write',
code: 'UNKNOWN'
}
That errno is 0x7fffffff + 1 wrapped around.
How often does it reproduce? Is there a required condition?
Always.
What is the expected behavior?
Should either work, since pwritev(2) works (I don't know if it has a limit less than SSIZE_MAX), or report a proper error before making the syscall. I did the latter recently for fs.write in c4e7dca8f30ff89b42e96fb8819558ed518a72dd. It would be nice if large files actually worked, but the best fix for that would require a new libuv function.
What do you see instead?
No response
Additional information
No response
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
Beginne bei fs.writevSync in fs.js und vergleiche die Argumentbehandlung mit der in Commit c4e7dca8f30ff89b42e96fb8819558ed518a72dd referenzierten fs.write-Validierung. Reproduziere den Fall mit dem großen Puffer unter Linux und bestimme anschließend, ob das fertige Verhalten die Anfrage vor dem syscall mit einem geeigneten Fehler ablehnen oder den größeren Puffer über libuv unterstützen sollte.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, node.js
- Bereich
- backend, operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100