Static Analysis (SAL) - überschreiben von _In_ Parameter erlaubt???
-
Ich versuche gerade ein Projekt mit SAL Annotations zu versehen. Dabei ist mir aufgefallen dass ich keine Meldung bekomme wenn ich Parameter als
_In_
markiere, wo die Funktion aber reinschreibt. Ala:void Test(_In_ int* p) { *p = 123; }
Läuft ohne Fehler durch (mit allen Regeln aktiviert).
Krasserweise bekomme ich nichtmal eine Meldung beivoid Test(_In_ int const* p) { *((int*)p) = 123; }
Das Projekt ist C und dummerweise nicht so trivial was die ganze const-correctness angeht. Ich hätte gehofft dass ich da SAL verwenden kann um sicherzugehen dass mir keiner in
_In_
Parameter reinschreibt.Kann man irgendwie erreichen dass man ne Meldung wenn übergebene Zeiger schreibend dereferenziert werden?
-
@hustbaer sagte in Static Analysis (SAL) - überschreiben von _In_ Parameter erlaubt???:
In int const
Naja. SAL führt meines Wissens nach nur eine Prüfung der aufrufenden Funktionen durch.
Auf der Funktionsseite verlässt sich SAL einfach auf die Compilerregeln und der C cast bügelt eben alles platt, was der Compiler prüfen kann.Soweit meine beschränktes Verständnis.
-
@Martin-Richter Ja, C Casts sind doof. Aber in C halt schwer vermeidbar (und es handelt sich um ein C Projekt).
Ansonsten: SAL checkt schon auch die Funktion selbst. z.B. wenn man bei einem
_Out_writes_(N)
Parameter auf Index N (oder höher) schreibt, bekomm man meist ne Warning (vermutlich abhängig von der Komplexität der Funktion). Bei_In_
Parametern in die man reinschreibt bekommt man aber nix, ganz egal wie einfach man den Code macht.Aber gut, ich schätze das wird sich dann wohl nicht ändern lassen.