Peligro C26835
RtlCompareMemory
devuelve el número de bytes coincidentes. Considere la posibilidad de reemplazar esta llamada porRtlEqualMemory
Comentarios
Cuando RtlCompareMemory
el valor devuelto de se trata como un valor booleano, se evalúa como true cuando hay al menos 1 byte igual antes de encontrar una diferencia. Además, comparar el resultado de RtlCompareMemory
a 0 se evalúa como false si hay al menos 1 byte coincidente. Este comportamiento puede ser inesperado porque es diferente de otras funciones de comparación, como strcmp
, lo que dificulta la comprensión del código. Para comprobar si hay igualdad, considere la posibilidad de usar RtlEqualMemory
en su lugar.
Esta advertencia está disponible en Visual Studio 2022, versión 17.7 y versiones posteriores.
Ejemplo
int foo(const void* ptr)
{
if (RtlCompareMemory("test", ptr, 5) == 0) // C26835
{
// ...
}
}
Para corregir el problema, compruebe si la intención original era comprobar la igualdad y reemplazar la llamada de función por RtlEqualMemory
:
int foo(const void* ptr)
{
if (RtlEqualMemory("test", ptr, 5)) // C26835
{
// ...
}
}
Consulte también
RtlEqualMemory
macro (wdm.h
)
RtlCompareMemory
function (wdm.h
)
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de