Varios investigadores del MIT recientemente han publicado un artículo que, aunque no directamente relacionado con Java, considero que es interesante para cualquier desarrollador de software. Resulta que el compilador gcc al emplear las opciones de optimización puede descartar código fuente que "aparentemente" no está haciendo nada, pero que en la práctica está relacionado con temas de seguridad. Por ejemplo, en el siguiente código:
char *buf = ...; char *buf_end = ...; unsigned int len = ...; if (buf + len >= buf_end) return; /* len too large */ if (buf + len < buf) return; /* overflow, buf+len wrapped around */ /* write to buf[0..len-1] */
el compilador descartaría el segundo if. Esto no se trata de un fallo teórico; los autores del artículo han encontrado múltiples fallos de seguridad en múltiples paquetes de Linux que han sido compilados con gcc, fallos de seguridad que no se corresponden con fallos en el código fuente del paquete, sino que han sido introducidos por el proceso de compilación. Aquí os dejo una tabla donde se listan los bugs que han encontrado como consecuencia de este comportamiento de gcc:
En el artículo original tenéis más detalle sobre exactamente qué tipo de bugs eran. Os recomiendo que le echéis un vistazo al artículo; es muy interesante.