Avertissement C26863
La valeur de retour d’une fonction
func
de gestion date/heure est ignorée
Cette règle a été ajoutée dans Visual Studio 2022 17.8.
Notes
Il est important de vérifier la valeur de retour d’une fonction qui transforme une structure de date lorsque l’argument d’entrée année, mois ou date a été manipulé sans gestion appropriée de l’année bissextile. Sinon, la fonction peut avoir échoué et l’exécution se poursuit avec un paramètre de sortie contenant des données non valides.
Voici une liste des fonctions que cet avertissement couvre :
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
Nom de l’analyse du code : DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED
Exemple
Le code suivant tente d’obtenir l’heure système actuelle, d’avancer le champ mois d’un mois et d’obtenir l’heure du fichier correspondant à l’heure système mise à jour via SystemTimeToFileTime
. Toutefois, SystemTimeToFileTime
cela peut échouer, car l’heure système mise à jour peut devenir non valide :
#include <Windows.h>
void foo()
{
FILETIME ft;
SYSTEMTIME st;
GetSystemTime(&st);
st.wMonth++; // Advance month by one
// Get the file time
SystemTimeToFileTime(&st, &ft); // C26863
}
Pour résoudre le problème, vérifiez toujours la valeur de retour des fonctions de manipulation de date-heure et gérez correctement les défaillances :
#include <Windows.h>
void foo()
{
FILETIME ft;
SYSTEMTIME st;
GetSystemTime(&st);
st.wMonth++; // Advance month by one
// Get file time
if (SystemTimeToFileTime(&st, &ft))
{
// Use file time
}
}
Heuristique
Cette règle reconnaît uniquement le struct Windows SYSTEMTIME
et le struct C tm
.
Cette règle est appliquée, que les arguments d’entrée aient été validés avant d’appeler ces fonctions. Si tous les arguments d’entrée sont validés avant d’appeler la fonction, cette règle peut signaler un faux avertissement.
Cette règle est une règle d’opt-in, ce qui signifie que l’analyse du code doit utiliser un fichier d’ensemble de règles, et que la règle doit être explicitement incluse dans le fichier d’ensemble de règles et activée pour qu’elle soit appliquée. Pour plus d’informations sur la création d’un ensemble de règles personnalisé pour l’analyse du code, consultez Utiliser des ensembles de règles pour spécifier les C++
règles à exécuter.