Funções Banidas pelo SDL

Nos comentários de um post anterior eu me referi a Microsoft ter banido internamente o uso de uma série de funções em C/C++, consideradas "perigosas" por estarem ligadas a ocorrência de estouros de buffer. A maior parte destas funções tratam de manipulação de strings, e o risco existe porque em C/C++ as strings não tem tamanho determinado (elas terminam somente quando um NULL é encontrado).

A relação das funções banidas está em https://msdn2.microsoft.com/en-us/library/bb288454.aspx. Note que a chamadas funções "n" de manipulação de string (como strncpy) também são banidas, porque apesar dessas funções especificarem o número máximo de caracteres manipulados (o tal "n"), a função não coloca o terminador NULL ao final da string caso esse número máximo seja atingido, continuando assim a permitir estouros de buffer.

No lugar destas funções de manipulação de string banidas podem ser utilizadas tanto as funções da biblioteca strsafe.h como as da biblioteca Safe CRT. A Safe CRT está sendo padronizada como ISO 24731 e é provavelmente a melhor escolha para a portabilidade do seu código.

O banimento de funções perigosas e substituição por versões mais seguras veio do OpenBSD, que baniu o uso de str(n)cpy e str(n)cat e as substituiu por strlcpy e strlcat. Infelizmente esta prática (como tantas outras de desenvolvimento seguro) não foi adotada por outros sistemas, e o resultado aparece.