`RULE-18-1`: Picky about how pointers are tracked, doesn't consider derefs before 1 from end, or array-to-pointer conversions

Aperta
#840 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
cpp
Ambito
devtools

Direzione di ricerca

Individua le implementazioni delle query per RULE-18-1 e M5-0-16, quindi confronta come tengono traccia della creazione dei puntatori, delle conversioni da array a puntatore, delle espressioni di indirizzo dirette e degli accessi alla posizione immediatamente successiva alla fine. Il lavoro è completato quando gli esempi distinguono i puntatori validi alla posizione immediatamente successiva alla fine dalle dereferenziazioni o indicizzazioni non valide e segnalano ogni caso non conforme senza i falsi negativi elencati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Difficulty-Medium false positive/false negative false-negative Impact-Medium Standard-AUTOSAR Standard-MISRA-C
Affected rules
  • RULE-18-1
  • M5-0-16
Description

The query expects that as pointers are made they are assigned to variables, and assumes that pointers into arrays always use ArrayExpr (eg x[y]). It also allows dereferencing or indexing past 1 of an array -- its OK to make a pointer to 1 past the array, but dereferencing is not defined.

Example
void example_function() {
  int x[10];

  int *p1 = &x[12]; // NON_COMPLIANT
  f(p1);

  int *p2 = x + 12; // NON_COMPLIANT[FALSE_NEGATIVE]

  f(&x[12]); // NON_COMPLIANT[FALSE_NEGATIVE]

  int *p3 = &x[10]; // COMPLIANT
  *p3; // NON_COMPLIANT[FALSE_NEGATIVE]
  x[10]; // NON_COMPLIANT[FALSE_NEGATIVE] - at least for MISRA-C
}
Lingua principale
CodeQL
Stelle
227
Fork
82
Merge medio
6g 7h
PR unite (30g)
9

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di github/codeql-coding-standards

Tutte le issue di github/codeql-coding-standards

Issue simili

Altre issue su DevTools

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.