Mentre è vero che ciò che accade durante un overflow del buffer ha molto a che fare con il contesto di sviluppo in cui si verifica l'overflow (cioè quale linguaggio, quale sistema operativo e persino quale tipo di hardware) - è anche un bene generale fai pratica per controllare la dimensione e la sintassi.
Sarei stupito se qualcuno avesse il tempo di scrivere per ognuna delle lingue che menzioni ... Conosco i capricci di alcune di queste lingue, ma non tutte, per colpire in modo adeguato tutte le lingue di loro in una singola risposta sarebbe un livello abbastanza impressionante di competenza.
Posso dire per un linguaggio gestito - come Java e (credo --- no il mio strong) .Net - stai guardando (in generale) ramificazioni meno terrificanti che in un linguaggio più vicino al bare metal (C, C ++ ). Un overflow del buffer in una lingua con memoria gestita dovrebbe consentire al programma di allocare la memoria man mano che le informazioni arrivano e gestirle in un modo un po 'eloquente (ad un certo punto!). L'overflow veramente classico è quello in cui il programmatore non ha assegnato correttamente la matrice di caratteri e i dati nell'overflow sono filtrati in un altro segmento del programma.
Detto questo - anche in Java un buffer overflow può causare risposte non intenzionali. In un linguaggio gestito, potrebbe essere che si succhia il processo di memoria allocata causando rallentamenti. È possibile che la macchina si "apri in errore" se non è stata configurata correttamente, è possibile produrre output imprevisti in qualsiasi meccanismo di persistenza dei dati utilizzato dal programma. Tutto ciò è vero indipendentemente dalla lingua.
Un controllo delle dimensioni generali in prima linea è semplicemente una buona pratica di programmazione. Perché non rimbalzare dati errati prima di lavorare di più? Stai salvando i cicli della CPU, il runtime e la memoria persistente e proteggi il back-end. La sicurezza a strati è solo un buon modo per andare.