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.