facebook/infer

fclose builtin not modeled as file resource

Open

#556 ouverte le 6 janv. 2017

Voir sur GitHub
 (5 commentaires) (0 réactions) (0 assignés)HTML (1 688 forks)batch import
cgood first taskhelp wanted

Métriques du dépôt

Stars
 (12 410 stars)
Métriques de merge PR
 (Merge moyen 2j 7h) (9 PRs mergées en 30 j)

Description

I noticed that the resource predicate for fclose matches Rmemory Mnew instead of Rfile as expected (PredSymb.re). fclose is modeled as free, but no file attribute is set (compare https://github.com/facebook/infer/blob/master/infer/models/c/src/libc_basic.c#L485 and fopen https://github.com/facebook/infer/blob/master/infer/models/c/src/libc_basic.c#L445).

Is there a particular reason for this? If I set the file attribute for fclose, the OCaml type matches the Rfile that I expect. I.e.,

int fclose(FILE* stream) {                                                          
  int n;                                                                            
  free(stream);                                                                     
  __set_file_attribute(stream);                                                     
  n = __infer_nondet_int();                                                         
  if (n > 0)                                                                        
    return 0;                                                                       
  else                                                                              
    return EOF;                                                                     
}  

Same question for the close model.

Guide contributeur