Currently CDataStream::ignore takes a signed value. However all other ignore() functions take an unsigned. This causes integer sanitizer issues when an unsigned value is passed to CDataStream::ignore.
Fix this by accepting unsigned in all ignore() functions consistently.
Also, simplify the code to remove the confusing "nSize negative` exception and fallback to the more meaningful "end of data" exception.