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 bei

    void 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?


  • Mod

    @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.


Log in to reply