nodejs / nodejs/node

fs: preserve readFile() errors when using a numeric fd and buffer option

Ouverte
#64,367 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

fs
Langage dominant
JavaScript
Étoiles
122k
Forks
37.3k
Merge moyen
4 j 2 h
PR mergées (30 j)
283

Description

Version

v24.18.0

Platform
Windows 11 x64
Subsystem

fs

What steps will reproduce the bug?

'use strict';

const fs = require('node:fs');

fs.writeFileSync('repro.txt', 'Hello world');

fs.open('repro.txt', 'r', (err, fd) => {
if (err) throw err;

fs.readFile(fd, { buffer: Buffer.alloc(5) }, (err, data) => {
console.log('err:', err && err.code);
console.log('data:', data && data.toString());
fs.closeSync(fd);
});
});

How often does it reproduce? Is there a required condition?

Always, when fs.readFile() is called with:
a numeric file descriptor, and
options.buffer, and
the supplied buffer is too small for the file

What is the expected behavior? Why is that the expected behavior?

The call should fail with ERR_INVALID_ARG_VALUE because the provided buffer is too small to contain the full file contents.

What do you see instead?

The error is dropped for user-supplied file descriptors, and the callback can complete successfully instead of reporting ERR_INVALID_ARG_VALUE.

Additional information

Root cause appears to be in lib/internal/fs/read/context.js (lines 180-194): ReadFileContext.close(err) ignores err when isUserFd is true, so the final callback runs as if no failure occurred.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction JavaScript fournie sur Node.js, puis examinez lib/internal/fs/read/context.js autour des lignes 180-194, en particulier ReadFileContext.close(err) pour les descripteurs de fichiers fournis par l’utilisateur. C’est terminé lorsque l’appel avec un fd numérique et un tampon trop petit signale ERR_INVALID_ARG_VALUE au lieu de se terminer avec succès.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, node.js
Domaine
operating-systems
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Clairement spécifiée
Accessibilité débutants
74/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.