Wheel of bugs
Después del gran éxito de una de las secciones que abrimos hace tiempo (la de arte), tenemos el placer de presentaros una nueva sección : Wheel of bugs.
El objetivo de esta sección es que todos aprendamos y discutamos sobre diferentes tipos de bugs, nosotros no somos gurús de este arte, es posible que algunos de los trozos de código que pongamos tengan más bugs de los que esperabamos, pero para eso están los comentarios, para discutir 😉
En lineas generales, la idea es poner un trozo de código, que normalmente será en C, y encontrar el fallo o los fallos que pueden existir en él, así como discutir la viabilidad de su explotación.
Estamos abiertos también a que nos mandeís vuestras propias colaboraciones, ya sean nuevos retos o exploits, para ello podeís poneros en contacto con nosotros a través de staff~48bits.com.
Bueno, aquí queda el primer código, spot the bug! 😉
{
int id;
int initialized;
}tag,*ptag;
ptag gettag( int n_alloc )
{
ptag p=NULL;
if ( n_alloc && ( p = (ptag) malloc ( n_alloc * sizeof(tag) ) ) )
{
memset(p,0, n_alloc *sizeof(tag));
}
return p;
}
int main (int argc, char **argv)
{
ptag p;
int n_alloc,n_init,id,i;
if (argc < 4) return 0;
n_alloc = atoi(argv[1]);
n_init = atoi(argv[2]);
id = atoi(argv[3]);
p = gettag(n_alloc);
if (p)
{
if ( n_init <= n_alloc )
{
for (i=0;i<n_init;i++)
{
p[i].id = id;
p[i].initialized = 1;
}
}
free(p);
}
}