The "buffer overflow within a struct" is used a lot when you have built a "header" struct that you are just pinning to the start of the some record and the bottom of the struct has a line like:
char data[0];
The purpose is to give you a handle on the remainder of the data even though you don't know the size beforehand.
Technically this is not valid under strict C, but it's also incredibly common.
Technically this is not valid under strict C, but it's also incredibly common.