/me hopes the C99 spec Did The Right Thing here, i.e. that sizeof(struct acl) acts as if .acls had size 0, so that you can simply malloc(sizeof(struct acl) + alloc_len * sizeof(struct resource_acl)).  In C89 one had to have the array be [1] and use (alloc_len - 1) in that computation (albeit gcc let you use [0] to make life easier); and any tool that thought it knew how to check array bounds was going to complain all the time.