El artículo aborda un problema fundamental en la biblioteca estándar de C: la falta de funciones confiables para convertir cadenas a enteros de forma segura. El autor analiza cuatro funciones principales: atol(), strtol(), strtoul() y sscanf(), concluyendo que todas presentan deficiencias significativas. La función atol() simplemente retorna un valor sin indicar si hubo error, lo cual la hace inutilizable para entrada no confiable; incluso ante de entrada inválida o desbordamiento, retorna LONG_MAX sinavisar. La función strtol() puede funcionar correctamente si se usa con precaución, verificando errno y el puntero al final de la cadena, pero solo funciona para números con signo. La función strtoul() para números sin signo tiene problemas severos: ante números negativos retorna valores incorrectos (por ejemplo, -1 se convierte en 2^64-1) y no hay forma de distinguir entre un valor válido y uno fuera de rango. Del mismo modo, sscanf() con %lu tiene problemas similares de detección de desbordamiento. El problema central es que el estándar C no define un comportamiento consistente para errores, dejando el comportamiento como indefinido en muchos casos, lo que hace imposible construir un analizador seguro sin implementar nuestra propia lógica. El autor argumenta que esto es grave porque programas pueden aceptar entrada maliciosa y procesarla como si fuera válido, creando vulnerabilidades de seguridad potenciales. La conclusión es que en C es prácticamente imposible implementar un analizador de unsigned long completamente seguro usando solo la biblioteca estándar.
Funciones de conversión a enteros en C: todas presentan fallas
Fuentes:
No way to parse integers in C
