Evite el código de compromiso con svn si se usan ciertas funciones C / C ++ obsoletas

¿Hay alguna manera de evitar que los desarrolladores cometan código cuando se usan ciertas funciones inseguras u obsoletas? Por ejemplo:

  • scanf
  • atoi
  • se pone
  • etc.

Un proyecto que he trabajado utiliza un set simple de macros en un encabezado que se incluye en cada file (algunos comstackdores le permiten especificar dicho encabezado en la command-line, por lo que puede forzar su uso en un file MAKE):

#define strcpy strcpy_is_banned_use_strlcpy #define strcat strcat_is_banned_use_strlcat #define strncpy strncpy_is_banned_use_strlcpy #define strncat strncat_is_banned_use_strlcat #define sprintf sprintf_is_banned_use_snprintf 

Con estas macros, la creación fallará si intenta usar una function prohibida (y el vinculador le dirá qué debe usar en su lugar).

Por lo tanto, no se comtesting el compromiso, per se, pero siempre y cuando los miembros del equipo se aseguren de que las cosas se desarrollan antes de que se registren, el sistema funciona. Y si no lo hacen, entonces todos comienzan a recibir correos electrónicos de compilation, lo que tiende a corregir rápidamente el comportamiento.

Simple, pero efectivo.

Puede usar un enlace de precompilation de Subversion. Ejemplo aquí: http://wordaligned.org/articles/a-subversion-pre-commit-hook

No debería ser demasiado difícil escribir algunas expresiones regulares para escanear sus confirmaciones para las funciones que no desea

Puede get parte del path usando "svnlook changed" y luego "svnlook cat" en un enganche post-commit, y grep para verificar las funciones que le interesan.

Eso le dará algunos falsos positivos, por ejemplo, si la function se menciona en una cadena o un comentario. Dependiendo de sus circunstancias (es decir, cuántos usuarios tiene y cuán quisquillosos son ;-), eso puede o no ser un problema para usted. Una solución más completa tendría que analizar el text del progtwig para encontrar las funciones que se llaman.

Como alternativa, asumiendo (dado que se refiere a ellas como funciones obsoletas) que está utilizando Visual Studio, podría cambiar las advertencias sobre estas funciones por errores en su proyecto, de modo que el código ni siquiera se comstack si se usan. .

Escriba un enlace precompromiso que realice los controles que desee aplicar en el código. Información sobre los ganchos de precompromiso