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

Offen
#840 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
cpp
Bereich
devtools

Rechercherichtung

Finde die Query-Implementierungen für RULE-18-1 und M5-0-16 und vergleiche anschließend, wie sie die Erstellung von Pointern, Array-zu-Pointer-Konvertierungen, direkte Adressausdrücke und Zugriffe auf die Position direkt hinter dem Ende verfolgen. Als erledigt gilt die Aufgabe, wenn die Beispiele gültige One-past-Pointer von ungültigen Dereferenzierungen oder Indexierungen unterscheiden und jeden nicht konformen Fall ohne die aufgeführten False Negatives melden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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
}
Vorherrschende Sprache
CodeQL
Sterne
227
Forks
82
Ø Merge
6 T. 7 Std.
Gemergte PRs (30 T.)
9

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus github/codeql-coding-standards

Alle Issues in github/codeql-coding-standards

Ähnliche Issues

Weitere Issues zu DevTools

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.