Reino: Code Quality

Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.

Undefined Behavior: File Pointer Use After Close

Abstract
O aplicativo usa uma operação de arquivo em um ponteiro de arquivo fechado.
Explanation
A realização de operações de arquivo em um objeto FILE do sistema após seu fluxo associado ser fechado resulta em comportamento indefinido. Dependendo do compilador C específico em uso, a operação do arquivo pode causar uma falha no sistema ou até mesmo resultar na modificação ou leitura do mesmo arquivo ou de um arquivo diferente.

Exemplo 1: O código a seguir mostra uma tentativa de ler um objeto FILE do sistema após o fluxo correspondente ser fechado.


FILE *sysfile = fopen(test.file, "r+");
res = fclose(sysfile);
if(res == 0){
printf("%c", getc(sysfile));
}


Como a função getc() é executada após o fluxo de arquivo para sysfile ser fechado, getc() resulta em comportamento indefinido e pode causar uma falha no sistema ou possível modificação ou leitura do mesmo arquivo ou de um arquivo diferente.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 910
[2] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 22.6
desc.controlflow.cpp.undefined_behavior_file_pointer_use_after_close