Bei deinen zwei Beispielen kann es eine Codeanalyse tatsächlich nicht wissen, da der Fehler nur abhängig von der Größe des externen Strings auftritt. Hier wäre es dann aber generell sinnvoll eine Warnung auszugeben, dass ein Speicherbereich unbekannter Größe ohne Überprüfung kopiert werden soll.
In meinem Ausgangsbeispiel oder dem mmap-Beispiel sind die Größen der Puffer allerdings bekannt und könnten deshalb auch auf Überlauf getestet.
Wie gesagt einfache Array out of Bounds sind IMHO keine buffer overflows.
Ich habe zur genauen Begrifflichkeit nichts gefunden. Es macht jedenfalls für mich keinen Unterschied, ob ein Array auf dem Stack oder auf dem Heap "überlaufen" wird.
Da Arrays auf dem Stack zu Kompilierzeit exakt bekannt sein müssen ist es für einen Analyzer natürlich potentiell einfacher hier zu überprüfen (wobei der Index nicht notwendigerweise bekannt ist). Letztendlich kann jeder Puffer als Array von Bytes gesehen werden. Aber ich habe dich verstanden, dein Standpunkt ist OOB -> Stack, OV -> Heap.
Du wirst auch nie ein Beispiel finden wo der Zugriff in fester Länge auf eine bekannte Adresse geschieht.
Das kann durchaus vorkommen, wenn beispielsweise für eine Http Statusseite verschiedene Strings aneinander gehängt werden sollen.