Puffertúlcsordulás

A Programozás Wiki wikiből

A puffertúlcsordulás egy olyan hibajelenség, amelynek során egy program változó hosszúságú adatok tárolása során - megfelelő határellenőrzések hiányában - túlír a szóban forgó adatok tárolására fenntartott memória- vagy pufferterület végén, a memóriában azt követő területek tartalmát is módosítva. A puffertúlcsordulás ártalmatlanabb esetekben futásidejű hibák keletkezéséhez, a program hibás működéséhez, inkonzisztens adatállapotokhoz vezethet, súlyosabb esetben azonban a szoftver teljes összeomlását vagy biztonsági rés keletkezését is okozhatja.

A puffertúlcsordulás megelőzhető megfelelő határellenőrzésekkel, amelyek gondoskodnak arról, hogy legfeljebb az erre a célra fenntartott memóriaterület végéig történjen az írás ill. olvasás az adott adat elérésre során.

A túlcsordulási hibák legsúlyosabban a C és C++ nyelveket érintik, mert azok nem kínálnak nyelvi szinten olyan adatszerkezeteket, amelyek beépített, automatikus határellenőrzés mellett lennének írhatók és olvashatók, de elméletileg tetszőleges más nyelvben is előfordulhatnak.

A puffertúlcsordulás lehetősége nagy mértékben csökkenthető, ha a nyelv nem engedélyezi a mutatóaritmetikát, valamint a futtatókörnyezet kötelezően ellenőrzi a tömbök indexelését. Puffertúlcsordulás ekkor csak úgy fordulhat elő, ha a program egy tömbön belül tárol logikailag különböző adatokat, illetve amikor a futtatókörnyezet befolyásán kívüli kódot hív meg (pl. az operációs rendszer szolgáltatásainak meghívásakor). A kötelező tömbindex-ellenőrzés lassítja a program futását, bár ez a gyakorlatban általában nem okoz teljesítményproblémát.