Avviso C26863
Il valore restituito da una funzione
func
di gestione data/ora viene ignorato
Questa regola è stata aggiunta in Visual Studio 2022 17.8.
Osservazioni:
È importante verificare il valore restituito di una funzione che trasforma una struttura di data quando l'argomento di input anno, mese o data è stato modificato senza gestire correttamente l'anno bisestile. In caso contrario, è possibile che l'esecuzione della funzione non sia riuscita e che l'esecuzione continui con un parametro di output contenente dati non validi.
Di seguito è riportato un elenco delle funzioni illustrate in questo avviso:
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
Nome dell'analisi del codice: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED
Esempio
Il codice seguente tenta di ottenere l'ora di sistema corrente, avanzare il campo del mese di un mese e ottenere l'ora del file corrispondente all'ora di sistema aggiornata tramite SystemTimeToFileTime
. Tuttavia, potrebbe non riuscire, SystemTimeToFileTime
perché l'ora di sistema aggiornata potrebbe diventare non valida:
#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
}
Per risolvere il problema, controllare sempre il valore restituito dalle funzioni di manipolazione di data e gestire gli errori in modo appropriato:
#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
}
}
Euristica
Questa regola riconosce solo lo struct di Windows SYSTEMTIME
e lo struct C tm
.
Questa regola viene applicata indipendentemente dal fatto che gli argomenti di input siano stati convalidati prima di chiamare queste funzioni. Se tutti gli argomenti di input vengono convalidati prima di chiamare la funzione, questa regola può segnalare un falso avviso.
Questa regola è una regola di consenso esplicito, ovvero l'analisi del codice deve usare un file del set di regole e la regola deve essere inclusa in modo esplicito nel file del set di regole e abilitata per l'applicazione. Per altre informazioni sulla creazione di un set di regole personalizzato per l'analisi del codice, vedere Usare set di regole per specificare le C++
regole da eseguire.