Fix overread when decoding X509KeyUsage extension on Windows
CryptDecodeObject on X509_KEY_USAGE always sets cbStructInfo to 32 (or 20 on x86),
reporting 8 bytes (both architectures) more than needed for the CRYPT_BIT_BLOB
structure (0 bytes more than the structure when transporting pbData=NULL).
However, that value is over-representative of the number of bytes actually
written (modified) in this case. The CRYPT_BIT_BLOB contains a cbData saying
how long the actual payload is (0 (pbData==NULL), 1, or 2 bytes), but
DecodeX509KeyUsageExtension didn't read it, just blindly read the value as a DWORD,
implicitly counting on the zero-init of arrays (and Win32's choice of values
combined with Little Endian layout).
By respecting the decoded cbData value (and not over-reading) the helper no
longer needs to manually clear the stackalloc.
Commit migrated from https://github.com/dotnet/corefx/commit/
0a05173f98493547d40b1865808481e76ede1212