Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

DiskUtils.GetWindowsRealPathByHandle retries GetFinalPathNameByHandle after a hard failure and ignores the required buffer size

Ouverte Adaptée aux débutants
#252 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 5 jours

@hamdiakin y travaille déjà.

Depuis le 26/10/2026.

  • #255 par @hamdiakin — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
74/100
Type d'issue
Refactorisation
Clarté
Clairement spécifiée
Activité
Active
Stack technique
csharp
Domaine
performance

Piste de recherche

Commencez par TruePath/DiskUtils.cs, plus précisément par DiskUtils.GetWindowsRealPathByHandle et sa fonction locale GetPath. Vérifiez comment GetFinalPathNameByHandle signale un échec par rapport à la taille de tampon requise, puis mettez à jour le comportement de nouvelle tentative conformément aux recommandations. Le travail est terminé lorsque les échecs irrécupérables renvoient null sans nouvelle tentative et que les tampons trop petits entraînent une nouvelle tentative avec la taille requise signalée.

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

Description

enhancement help wanted

DiskUtils.GetWindowsRealPathByHandle calls GetFinalPathNameByHandle through the local GetPath function: first with a 256-char buffer, then, if that "fails", with a WindowsMaxPath (32,767-char) buffer:

if (GetPath(256, out var realPath) == false)
{
    if (GetPath((uint)WindowsMaxPath, out realPath) == false)
        return null;
}

GetPath returns false in two different situations, and the caller handles both the same way:

  1. result == 0: a real error. According to the GetFinalPathNameByHandle documentation, 0 means the function failed (e.g. ERROR_PATH_NOT_FOUND, ERROR_NOT_ENOUGH_MEMORY, ERROR_INVALID_PARAMETER). A larger buffer can't fix any of these, yet the code still retries with a 32,767-char buffer: one more P/Invoke and one 64 KiB char[] rent that cannot succeed.
  2. result > bufferSize: buffer too small. In this case the return value is the exact required size, including the terminating null. The code discards it and rents a 32,767-char buffer instead. For example, a path of 300 characters needs 301 chars but gets a 64 KiB array.

Neither case produces a wrong result. This is wasted work on an uncommon path. It is not a correctness failure.

Recommendations

  • Retry only when the buffer was too small (result > bufferSize), and use result as the new buffer size.
  • On result == 0, return null immediately (the caller already falls back to the original path).
  • Optionally, the first attempt could use a stackalloc'd MAX_PATH-sized buffer, so the pool is only touched for long paths.
Langage dominant
C#
Étoiles
109
Forks
26
Merge moyen
5 j 23 min
PR mergées (30 j)
10

Préparer son environnement

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.

Autres issues de ForNeVeR/TruePath

Toutes les issues de ForNeVeR/TruePath

Issues similaires

Plus d'issues C#

Recevez les nouvelles issues par e-mail

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