コード例 #1
0
        private void MatchUTF8SequenceOverrunTest(byte[] inbytes, int numBytes, bool isQuery, bool iriParsing)
        {
            Encoding noFallbackCharUTF8 = Encoding.GetEncoding(
                Encoding.UTF8.CodePage,
                new EncoderReplacementFallback(""),
                new DecoderReplacementFallback(""));

            char[] chars = noFallbackCharUTF8.GetChars(inbytes, 0, numBytes);

            Assert.False(
                chars.Length == 0,
                "Invalid test: MatchUTF8Sequence cannot be called when no Unicode characters can be decoded.");

            // dest is guaranteed to have space for the escaped version of all characters (in the form of %HH).
            char[] dest           = new char[inbytes.Length * 3];
            char[] unescapedChars = new char[inbytes.Length];
            chars.CopyTo(unescapedChars, 0);

            int expectedLength     = inbytes.Length * 3;
            ValueStringBuilder vsb = HeapCheck.CreateFilledPooledArray(expectedLength);

            vsb.Length = 32;
            UriHelper.MatchUTF8Sequence(
                ref vsb,
                unescapedChars,
                chars.Length,
                inbytes,
                numBytes,
                isQuery,
                iriParsing);

            // Check for buffer under and overruns.
            HeapCheck.ValidatePadding(vsb, expectedLength);
        }