`FileSystem.makeTempDirectory` crashes the program when it fails, instead of failing the task
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 86/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript
- Bereich
- backend
Rechercherichtung
Beginne mit Gren/Kernel/FileSystem.js und führe die in der Issue verlinkte Reproduktion mit der gezeigten gren.json und Main.gren aus. Verfolge den Fehler-Callback von fs.mkdtemp und überprüfe, dass Fehler beim Parsen eines undefinierten Pfads nicht mehr zu einem Absturz führen. Als erledigt gilt die Aufgabe, wenn Task.onError einen FileSystem.Error erhält, dessen Code den zugrunde liegenden Fehler widerspiegelt, etwa ENOENT oder EPERM.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Found against: gren 0.6.6, gren-lang/core 7.4.2, gren-lang/node 6.1.3, node 22
Reproduction: https://github.com/gilramir/gren-bug-reports/tree/main/2026-09-14-maketempdirectory-failure
FileSystem.makeTempDirectory is a Task FileSystem.Error Path, but when node
cannot make the directory the program dies with The "path" argument must be of type string. Received undefined and the program's Task.onError never runs.
Expected: the task fails with an Error whose code is ENOENT (or EPERM, etc). Any failure
reaches it: a missing parent directory, a prefix naming a directory the user
cannot write, or a full temporary directory.
Reproduction
gren.json dependencies: gren-lang/core 7.4.2, gren-lang/node 6.1.3. Save as src/Main.gren. Build and run with gren make Main --output=app && node app:
module Main exposing (main)
import FileSystem
import FileSystem.Path as Path
import Init
import Node
import Stream
import Task
main : Node.SimpleProgram a
main =
Node.defineSimpleProgram <| \env ->
Init.await FileSystem.initialize <| \fs ->
Node.endSimpleProgram
(FileSystem.makeTempDirectory fs "no-such-directory/x"
|> Task.map (\path -> "made " ++ Path.toPosixString path)
|> Task.onError (\e -> Task.succeed ("failed: " ++ FileSystem.errorCode e))
|> Task.andThen (\line -> Stream.writeLineAsBytes line env.stdout)
|> Task.onError (\_ -> Task.succeed env.stdout)
)
Output:
$ node app
node:internal/errors:540
throw error;
^
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
at Object.normalize (node:path:1309:5)
at _FilePath_parse (/path/to/app:2889:40)
at _FilePath_fromString (/path/to/app:2885:10)
at /path/to/app:3664:40
at FSReqCallback.oncomplete (node:fs:186:23) {
code: 'ERR_INVALID_ARG_TYPE'
}
Node.js v22.23.2
Cause
Gren/Kernel/FileSystem.js:
fs.mkdtemp(path.join(os.tmpdir(), prefix), function (err, dir) {
if (err) {
callback(
__Scheduler_fail(
_FileSystem_constructError(__FilePath_fromString(dir), err),
),
);
On failure dir is undefined, and __FilePath_fromString(undefined) calls
path.normalize(undefined), which throws inside node's callback, where nothing
catches it.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 13
- Forks
- 6
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus gren-lang/node
-
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 68/100
-
breaking enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 38/100
-
breaking enhancement
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 42/100
-
breaking bug
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 64/100
-
enhancement
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
Ähnliche Issues
-
routine:ci-review
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
harlan-zw/unlighthouse#456 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
beginner enhancement good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
philaconvalley/website#217 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug confirmed issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
open-webui/open-webui#32896 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
⚠ needs intervention document not found
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
OpenTermsArchive/contrib-declarations#4151 ·
Maintainer antworten meist innerhalb von 1 Tag
-
correction via-web
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
ch-bas/cctv-camera-database#416 ·
Maintainer antworten meist innerhalb von 1 Tag