Aviso C26863
O valor de retorno de uma função
func
de manipulação de data e hora é ignorado
Essa regra foi adicionada no Visual Studio 2022 17.8.
Comentários
É importante verificar o valor de retorno de uma função que transforma uma estrutura de data quando o argumento de entrada de ano, mês ou data foi manipulado sem o tratamento adequado do ano bissexto. Caso contrário, a função pode ter falhado e a execução continua com um parâmetro de saída contendo dados inválidos.
Segue-se uma lista das funções que este aviso abrange:
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
Nome da análise de código: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED
Exemplo
O código a seguir tenta obter a hora atual do sistema, adiantar o campo de mês em um mês e obter a hora do arquivo que corresponde à hora atualizada do sistema via SystemTimeToFileTime
. No entanto, pode falhar, SystemTimeToFileTime
pois a hora atualizada do sistema pode se tornar inválida:
#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
}
Para corrigir o problema, sempre verifique o valor de retorno das funções de manipulação de data e hora e manipule as falhas adequadamente:
#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
}
}
Heurística
Esta regra só reconhece a struct do Windows SYSTEMTIME
e a estrutura C tm
.
Essa regra é imposta independentemente de os argumentos de entrada terem sido validados antes de chamar essas funções. Se todos os argumentos de entrada forem validados antes de chamar a função, essa regra poderá relatar um aviso falso.
Essa regra é uma regra de aceitação, o que significa que a análise de código deve usar um arquivo de conjunto de regras, e a regra deve ser explicitamente incluída no arquivo de conjunto de regras e habilitada para que seja aplicada. Para obter mais informações sobre como criar um conjunto de regras personalizado para análise de código, consulte Usar conjuntos de regras para especificar as C++
regras a serem executadas.