Advertencia C26863
Se omite el valor devuelto de una función
func
de control de fecha y hora.
Esta regla se agregó en Visual Studio 2022 17.8.
Comentarios
Es importante comprobar el valor devuelto de una función que transforma una estructura de fecha cuando el argumento de entrada year, month o date se manipuló sin un control adecuado del año bisiesto. De lo contrario, es posible que la función haya producido un error y la ejecución continúe con un parámetro de salida que contiene datos no válidos.
A continuación se muestra una lista de las funciones que trata esta advertencia:
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
Nombre de análisis de código: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED
Ejemplo
El código siguiente intenta obtener la hora actual del sistema, avanzar el campo mes en un mes y obtener la hora del archivo que corresponde a la hora del sistema actualizada a través de SystemTimeToFileTime
. Sin embargo, SystemTimeToFileTime
puede producirse un error, ya que la hora del sistema actualizada puede no ser vá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 corregir el problema, compruebe siempre el valor devuelto de las funciones de manipulación de fecha y hora y controle los errores correctamente:
#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 regla solo reconoce la estructura de Windows SYSTEMTIME
y la estructura de C tm
.
Esta regla se aplica independientemente de si los argumentos de entrada se validaron antes de llamar a estas funciones. Si se validan todos los argumentos de entrada antes de llamar a la función, esta regla puede notificar una advertencia falsa.
Esta regla es una regla de participación, lo que significa que el análisis de código debe usar un archivo de conjunto de reglas y la regla debe incluirse explícitamente en el archivo del conjunto de reglas y habilitarla para que se aplique. Para obtener más información sobre cómo crear un conjunto de reglas personalizado para el análisis de código, vea Usar conjuntos de reglas para especificar las C++
reglas que se van a ejecutar.