Conjunto de reglas Reglas recomendadas mixtas
Las reglas mixtas recomendadas de Microsoft se centran en los problemas más graves y habituales de los proyectos de C++ compatibles con Common Language Runtime, incluyendo posibles vulnerabilidades de seguridad, bloqueos de la aplicación y otros errores importantes de diseño y lógica.Debe incluir este conjunto de reglas en todos los conjuntos de reglas personalizados que cree para sus proyectos de C++ compatibles con Common Language Runtime.Este conjunto de reglas está diseñado para configurarse con Visual Studio Professional y versiones posteriores.
Regla |
Descripción |
---|---|
Usar la Memoria sin inicializar. |
|
Desreferenciar el puntero nulo. |
|
Uso del valor sin comprobar. |
|
Valor devuelto omitido |
|
Terminación en cero de la llamada |
|
Falta de terminación en cero |
|
Concatenación incorrecta |
|
Argumento de cadena que falta para dar formato a la función |
|
Argumento entero ausente para dar formato a la función |
|
Argumento puntero ausente para dar formato a la función |
|
Argumento de puntero de cadena ausente para dar formato a la función |
|
Devolver la memoria no inicializada |
|
El índice supera el máximo del búfer |
|
El índice supera el máximo del búfer de pila |
|
Conversión no válida HRESULT a BOOL |
|
Conversión no válida BOOL a HRESULT |
|
Conversión insertada por compilador no válida BOOL a HRESULT |
|
Prueba HRESULT no válida con NOT |
|
HRESULT no válido en comparación con -1 |
|
Asignación no válida de HRESULT cómo -1 |
|
Uso no válido de HRESULT como booleano |
|
Constante distinta de cero con operador lógico Or |
|
Operador lógico Or con constante distinta de cero |
|
Cero con operador lógico AND pierde efectos secundarios |
|
Desenredo local forzado |
|
Crear una DACL Nula |
|
Descriptores inéditos de dirección |
|
Uso desprotegido de Alloca |
|
Usar el subproceso finalizar |
|
Código no alcanzado en interruptor limitado por operador en el nivel de bits Or |
|
Uso de la Aritmética de Byte |
|
Uso excesivo de pila |
|
Usar Alloca en bucle |
|
Faltan paréntesis en la conversión |
|
Puntero de desreferenciación omitido |
|
Falta el argumento Float para dar formato ala función |
|
Argumento adicional para dar formato a la función |
|
Argumento no Float para dar formato a la función |
|
Argumento no Entero para dar formato a la función |
|
Argumento no Carácter para dar formato a la función |
|
Conversión no válida de cadena |
|
Llamada no válida de CreateProcess |
|
No coincidencia de Matriz-Nuevo Escalar-Eliminar |
|
No coincidencia de Escalar-Nueva Matriz-Eliminar |
|
No coincidencia de Asignación-Desasignación de memoria |
|
Precedencia de la relación de operador en el nivel de bits |
|
Asignación remplaza prueba |
|
Error de coincidencia en Matriz Primitiva-Nuevo Escalar-Eliminar |
|
Argumento objeto no válido para dar formato a la función |
|
Operador lógico Or de constantes |
|
Operador lógico Or distinto de cero que pierde efectos secundarios |
|
Prueba redundante |
|
Inclusión mutua del operador lógico AND es falsa |
|
La exclusión mutua sobre el operador lógico or es verdadera |
|
Prioridad entre operadores NOT lógico y AND bit a bit |
|
Prioridad entre operadores NOT lógico y OR bit a bit |
|
Recuento de un máximo de bucles |
|
Recuento de un mínimo de bucles |
|
Cuerpo del bucle nunca ejecutado |
|
Bucle infinito |
|
Bucle ejecutado una vez |
|
Resultado de la conversión con desplazamiento a un mayor tamaño |
|
Campo de bits a comparación booleana |
|
Argumento de cadena de carácter no válido para dar formato a la función |
|
Argumento de cadena de caracteres anchos no válido para dar formato a la función |
|
Error de coincidencia en tamaño y recuento de uso |
|
Llamada de función con argumento variable incorrecta |
|
Pérdidas por Realloc |
|
Constante no válida del filtro de excepciones |
|
Excepción bucle de ejecución continuo |
|
Precedencia del operador bit a bit Or |
|
Complemento No No |
|
Excepción continuar la búsqueda |
|
Omitido por coma |
|
Copia de la cadena en lugar de la comparación de la cadena |
|
Error de coincidencia de tipo de argumento potencial |
|
Marcas VirtualFree no válidas |
|
Parámetro no válido VirtualFree |
|
Tamaño no válido VirtualFree |
|
Controlador del proceso con pérdidas |
|
Falta de información de apagado |
|
Saturación del búfer de recuento de elemento y recuento de bytes |
|
División de tamaño de puntero |
|
Saturación de lectura |
|
Saturación de escritura |
|
Valor de parámetro no válido |
|
Valor de parámetro no válido |
|
Propiedad no válida del atributo |
|
Valores de propiedad de atributo en conflicto |
|
Las referencias no pueden ser nulas |
|
NULL en un no Puntero |
|
MustCheck en vacío |
|
Tamaño de búfer en no Puntero o matriz |
|
Desigualdad Null en desreferenciación cero |
|
Acceso de escritura en constante |
|
Retorno utilizado en condición previa |
|
Null finalizado en no Puntero |
|
La propiedad MustCheck debe ser Sí o No |
|
Tamaño de elemento sin tamaño de búfer |
|
El tamaño de búfer supera el tamaño de la matriz |
|
Tamaño de búfer en no Puntero |
|
Ninguna propiedad en el atributo |
|
Tamaño válido en búfer no Legible |
|
Tamaño de escritura en búfer no modificable |
|
Anotación inválida: el valor de propiedad 'NeedsRelease' debe ser Sí o No. |
|
Desreferenciación de la cadena de tamaño no válido |
|
Tipo tamaño de cadena no válido |
|
Parámetro de cadena de tamaño no válido |
|
Ubicación inalcanzable de la cadena de tamaño no válida |
|
Tipo del búfer del tamaño de cadena no válido |
|
Anotación no válida: La propiedad 'NeedsRelease' no se puede utilizar en valores de tipo void |
|
Estilo desconocido del formato de la cadena |
|
El uso de anotaciones de atributo en esta función invalidará todas las anotaciones __declspec existentes |
|
Especificación de tamaño no válida: expresión no analizable |
|
Deref= no válida o Notref=: expresión no analizable |
|
Este no es un valor Sí/No/Quizás válido |
|
El valor no es un valor de cadena |
|
El valor no es un número |
|
Error inesperado en la expresión de anotación |
|
El número esperado de argumentos para la anotación no coincide con el número real de argumentos para la anotación |
|
Error inesperado de Anotación para anotaciones |
|
No se pudo guardar el archivo de registro XML |
|
Condición de carrera |
|
La operación entrelazada no se usó correctamente |
|
El llamador no puede mantener el bloqueo |
|
El llamador no puede liberar el bloqueo |
|
El llamador no puede mantener ningún bloqueo |
|
Error al liberar el bloqueo |
|
Error al adquirir o mantener el bloqueo |
|
Liberar el bloqueo no retenido |
|
Error de anotación SAL de simultaneidad |
|
La expresión no es verdadera en esta llamada. |
|
El parámetro anotado debe ser un puntero |
|
Las clases de función de esta función no coinciden con las clases de función del typedef usado para definirla. |
|
La función que se va a asignar o pasar debe tener una anotación _Function_class_ para al menos una de las clases |
|
El puntero a función al que se asigna tiene anotada la clase de función, no incluida en la lista de clases de funciones. |
|
El tipo del parámetro actual debe coincidir exactamente con el tipo |
|
A una variable a la que se tiene acceso mediante una función Interlocked siembre se debe obtener acceso mediante una función Interlocked. |
|
Acceso a una variable local mediante una función Interlocked |
|
Debe llamarse a la función desde un bloque try/except |
|
La variable de argumento debería ser una constante (literal) |
|
Los argumentos constantes deberían ser variables |
|
Considere utilizar otra función en su lugar. |
|
anotación Error |
|
No debe llamarse nunca a la función desde un bloque try/except |
|
El argumento se está pasando a una función que espera un puntero a un objeto (no un puntero a un puntero) |
|
Desreferenciando el puntero NULL.El puntero contiene el mismo valor NULL que otro puntero. |
|
El argumento no puede ser un valor, y es una copia del valor encontrado en el puntero |
|
La variable contiene un valor que debe ser examinado |
|
El requisito no se cumple. (La expresión no se evalúa como true.) |
|
Referencia no válida a un miembro no estático. |
|
Referencia ambigua a un miembro de clase. |
|
Se usó _Success_ u _On_failure_ en un contexto no válido |
|
Puntos izquierdo del operando un struct, use “->” |
|
El operando izquierdo es un struct, use '.' |
|
La declaración del símbolo tiene una declaración en conflicto |
|
Las anotaciones para el contexto _on_failure_ no deben estar en un contexto previo explícito: |
|
Se esperaba un nombre de contexto estático para SAL_context. |
|
Expresión de puntero esperada para la anotación |
|
La anotación _Use_decl_annotations_ se debe usar para hacer referencia, sin modificación, a una declaración anterior. |
|
Los nombres de atributo de parámetros deben ser p1...p9 |
|
typefix no se puede aplicar a un parámetro que ya tenga un typefix |
|
La anotación de checkReturn solicita solo a las condiciones posteriores el parámetro de la función específica. |
|
Para la función, el número de parámetros para la anotación no coincide con el encontrado en el archivo. |
|
Para el parámetro de la función, el parámetro de anotación no coincide con el que se ha encontrado en el archivo |
|
Se esperaba un miembro de enumeración para el parámetro de la anotación |
|
Expresión de entero esperada para anotación el parámetro en la anotación |
|
Expresión de cadena esperada para el parámetro en la anotación |
|
__si, __no, or __quizás esperado para la anotación |
|
No se encontró el token o identificador esperado para el parámetro de la anotación |
|
La anotación requiere parámetros |
|
No se encontró el número correcto de parámetros requeridos en la anotación |
|
La anotación no puede ser también un elemento PrimOp (en la declaración actual) |
|
La anotación no puede ser también un elemento PrimOp (ver declaración anterior) |
|
Parámetro de anotación: no puede utilizar tipos en anotaciones |
|
La anotación no admite parámetros. |
|
El tipo de parámetro no tiene ningún miembro. |
|
La anotación sólo es válida en la matriz |
|
pre, post o deref no se aplican a ninguna anotación |
|
pre, post o deref se aplican a un bloque |
|
La expresión __at no se aplica a la función actual |
|
La función no puede usarse de forma independiente como anotación |
|
La anotación no se puede usar en una expresión |
|
Ya no se admite la anotación en el parámetro |
|
La anotación en el parámetro tiene más de un elemento value, stringValue y longValue.Use paramn=xxx |
|
la anotación en el parámetro tiene tanto un elemento value como stringValue o longValue, además de paramn=xxx.Use solamente paramn=xxx. |
|
La anotación en el parámetro tiene un elemento param2 pero no param1 |
|
La anotación para la función de parámetro no se reconoce |
|
La anotación de la función en el parámetro requiere más desreferencias de las que permite el tipo anotado real. |
|
La anotación de la función tiene un parámetro o anotación externa que no se puede analizar. |
|
La anotación de la función anota 'this' en una función no miembro. |
|
La anotación de parámetro para función no coincide con el tipo de parámetro |
|
Anotación incoherente para la función: la instancia anterior tiene un error. |
|
Anotación incoherente para la función: esta instancia tiene un error. |
|
Anotación incoherente para la función: el parámetro tiene otras anotaciones en esta instancia. |
|
Anotación incoherente para la función: el parámetro tiene otras anotaciones en esta instancia. |
|
dynamic_cast<>() no se admite en anotaciones |
|
Se encontró un error de sintaxis de anotación en la función, para la anotación |
|
Se encontró un error de sintaxis en una anotación condicional para la anotación de tipo intrínseco |
|
Los valores de las listas de resultados deben ser constantes. |
|
Se encontró un error de sintaxis de anotaciones en la función para la anotación. |
|
El parámetro de la anotación de la función al examinar no es coherente con la declaración de la función |
|
Para la función, las pistas no son coherentes con la declaración de la función |
|
El parámetro para _Macro_value_ es nulo |
|
Para el símbolo, se encontró un elemento 'begin' sin el elemento 'end' correspondiente |
|
Para el símbolo se encontró un elemento 'end' sin el elemento 'begin' correspondiente |
|
Las cadenas de formato deben estar en las condiciones previas |
|
Para la función, error de sintaxis en parámetro |
|
Para la función, error de sintaxis cerca del final |
|
Para la función, error de sintaxis en la anotación _At_() (nombre de parámetro no reconocido) |
|
Para la función, error de sintaxis en la anotación _At_() (nombre de parámetro no válido) |
|
Para la función: ReadableTo o WritableTo no tenían una especificación de límite como parámetro |
|
La anotación de la función contiene más valores External que el número real de parámetros |
|
null/notnull posterior en el nivel 0 de desreferenciación carece de sentido para la función. |
|
Los operandos de expresión de tipos no son compatibles para el operador |
|
Ninguna anotación para la primera declaración de la función. |
|
Se encontró un operador adicional de _Deref_ en la anotación. |
|
Se encontró un operador ambiguo de _Deref_ en la anotación. |
|
Se encontró un operador incorrectamente colocado de _Notref_ aplicado al token. |
|
Se detectó un error mientras analizaba un token. |
|
La anotación en parámetro es obsoleta |
|
La anotación en parámetro es obsoleta |
|
La anotación describe una situación no aplicable de forma condicional. |
|
La anotación describe dónde no se puede usar un valor dinámico (una variable) en la condición. |
|
Los tipos que poseen campos descartables deben ser descartables |
|
Declare los controladores de evento correctamente |
|
Marcar los ensamblados con AssemblyVersionAttribute |
|
Los tipos secundarios deberían poder llamar a los métodos de interfaz |
|
Los tipos que poseen recursos nativos deben ser descartables |
|
Mueva P/Invokes a la clase NativeMethods |
|
No oculte métodos de clases base |
|
Implemente IDisposable correctamente |
|
No producir excepciones en ubicaciones inesperadas |
|
Evitar aceleradores duplicados |
|
Deben existir puntos de entrada P/Invoke |
|
Los elementos P/Invoke no deben estar visibles |
|
Los tipos de diseño automático no deben ser visibles para COM |
|
Llame a GetLastError inmediatamente después de P/Invoke |
|
Los tipos base de tipos visibles para COM deben ser visibles para COM |
|
Los métodos de registro COM se deben adjuntar |
|
Declare los elementos P/Invoke correctamente |
|
Quitar los finalizadores vacíos |
|
Los campos de tipos de valor deberían ser portátiles |
|
Las declaraciones P/Invoke deben ser portátiles |
|
No bloquear objetos con identidad débil |
|
Revisar las consultas SQL en busca de vulnerabilidades de seguridad |
|
Especifique cálculo de referencias para argumentos de cadena P/Invoke |
|
Revisar la seguridad declarativa en los tipos de valor |
|
Los punteros no deberían estar visibles |
|
Los tipos seguros no deberían exponer campos |
|
La seguridad del método debería ser un supraconjunto del tipo |
|
Los métodos APTCA deben llamar solo a métodos APTCA |
|
Los tipos APTCA solo amplían tipos base APTCA |
|
No exponer indirectamente métodos con peticiones de vínculos |
|
Las peticiones de vínculos de remplazo deberían ser idénticas a la base |
|
Incluir cláusulas Finally vulnerables en un bloque Try externo |
|
Las peticiones de tipo vínculos requieren peticiones de herencias |
|
Los tipos críticos para la seguridad no pueden participar en la equivalencia de tipos |
|
Los constructores predeterminados deben ser al menos tan críticos para la seguridad como los constructores predeterminados de tipo base. |
|
Los delegados deben enlazarse a métodos con una transparencia coherente |
|
Los métodos deben mantener una transparencia coherente cuando remplazan métodos base |
|
Los métodos transparentes deben contener solo IL que se puedan comprobar |
|
Los métodos transparentes no deben llamar a métodos con el atributo SuppressUnmanagedCodeSecurity |
|
El código transparente no debe hacer referencia a elementos críticos para la seguridad |
|
Los métodos transparentes no deben satisfacer LinkDemands |
|
Los tipos deben ser al menos tan críticos para la seguridad como sus interfaces y tipos base. |
|
Los métodos transparentes no pueden usar aserciones de seguridad |
|
Los métodos transparentes no deben llamar a código nativo |
|
Iniciar de nuevo para preservar los detalles de la pila |
|
No desechar objetos varias veces |
|
Inicializar campos estáticos de tipo de valor alineados |
|
No marcar los componentes servidos como WebMethod |
|
Los campos desechables se deben desechar |
|
No llamar a métodos reemplazables en constructores |
|
Los tipos descartables deben declarar el finalizador |
|
Los finalizadores deben llamar al finalizador de la clase base |
|
Implementar constructores de serialización |
|
Sobrecargar el operador de igualdad al remplazar el tipo de valor de igualdad |
|
Marcar puntos de entrada de Windows Forms con STAThread |
|
Marcar todos los campos no serializables |
|
Llamar a métodos de clase base en tipos ISerializable |
|
Marcar los tipos ISerializable con SerializableAttribute |
|
Implementar los métodos de serialización de forma correcta |
|
Implementar ISerializable correctamente |
|
Proporcionar argumentos correctos a los métodos de formato |
|
Prueba para NaN correcta |