rawvideo ignores i_{width|height} of the input stream.
If I feed frames to rawvideo that have width/height not a multiple of 16, then vlc may crash with a SIGSEGV. The crash occurs in rawvideo.c:SendFrame() (and maybe in other places as well, I didn't test the other paths) if 'p_sys->b_invert' is true. The said function uses vout_InitPicture() to get i_{width|height} and ignores the values passed by the demuxer in es_format_t. Because vout_InitPicture() always expands these vales to multiples of 16, the memcpy() a few lines later will crash vlc.
Whose fault is it? Does the demuxer need to make sure that the 'block_t *' is big enough and the frame width/height expanded to the next biggest multiple of 16? Or should the decoder respect the values the demuxer passed to it through es_format_t? I would opt for the later, because otherwise i_visible_{width|height} in es_format_t are totally useless (after all, if they are ignored by the modules, why keep them there?).
The fix for this should be very easy, just allocate a new block and copy the data to the new block while respecting source es_format_t width/height. This would have to be done even if 'p_sys->b_invert' is false.