Ostrzeżenie C26863
Wartość zwracana z funkcji
func
obsługi daty i godziny jest ignorowana
Ta reguła została dodana w programie Visual Studio 2022 17.8.
Uwagi
Ważne jest, aby sprawdzić wartość zwracaną funkcji, która przekształca strukturę dat, gdy argument wejściowy roku, miesiąca lub daty był manipulowany bez odpowiedniej obsługi roku przestępnego. W przeciwnym razie funkcja mogła zakończyć się niepowodzeniem i wykonanie będzie kontynuowane z parametrem wyjściowym zawierającym nieprawidłowe dane.
Poniżej znajduje się lista funkcji, które obejmuje to ostrzeżenie:
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
Nazwa analizy kodu: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED
Przykład
Poniższy kod próbuje uzyskać bieżący czas systemowy, przesunąć pole miesiąca o jeden miesiąc i uzyskać czas pliku, który odpowiada zaktualizowanemu czasowi systemu za pośrednictwem .SystemTimeToFileTime
Jednak może się nie powieść, SystemTimeToFileTime
ponieważ zaktualizowany czas systemu może stać się nieprawidłowy:
#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
}
Aby rozwiązać ten problem, należy zawsze sprawdzać wartość zwracaną z funkcji manipulowania datą i odpowiednio obsługiwać błędy:
#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
}
}
Algorytmy heurystyczne
Ta reguła rozpoznaje tylko strukturę systemu Windows SYSTEMTIME
i strukturę języka C tm
.
Ta reguła jest wymuszana niezależnie od tego, czy argumenty wejściowe zostały zweryfikowane przed wywołaniem tych funkcji. Jeśli wszystkie argumenty wejściowe są weryfikowane przed wywołaniem funkcji, ta reguła może zgłaszać fałszywe ostrzeżenie.
Ta reguła jest regułą zgody, co oznacza, że analiza kodu powinna używać pliku zestawu reguł, a reguła powinna zostać jawnie dołączona do pliku zestawu reguł i włączona, aby została zastosowana. Aby uzyskać więcej informacji na temat tworzenia niestandardowego zestawu reguł na potrzeby analizy kodu, zobacz Używanie zestawów reguł do określania C++
reguł do uruchomienia.