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.
Como a função
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
[3] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Rule 22.6
[4] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2023 Rule 6.8.1
desc.controlflow.cpp.undefined_behavior_file_pointer_use_after_close