...
In this example, taken from dowd, buf
is an array of 1024 integers and buf_ptr
is used to insert new integers into buf
, which is an array of 1024 integers. If there is data to be inserted into buf
(which is indicated by havedata()
) and buf_ptr
has not been incremented past buf + sizeof(buf)
, then an integer is inserted in into buf
via buf_ptr
. However, the sizeof
operator returns the total number of bytes in buf
, which, assuming four-byte integers, is 4096B4096 bytes. This value is then scaled to the size of an integer and added to buf
. As a result, it is possible to write integers past the end of buf
and cause a buffer overflow.
...