// Copyright 2015 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "core/include/fpdfapi/fpdf_parser.h" #include "testing/gtest/include/gtest/gtest.h" TEST(fpdf_parser_decode, HexDecode) { { // Empty src string. uint8_t* dest = nullptr; FX_DWORD dest_size; uint8_t src[] = ""; EXPECT_EQ(0, HexDecode(src, 0, dest, dest_size)); EXPECT_EQ(0, dest_size); EXPECT_EQ('\0', dest[0]); FX_Free(dest); } { // Regular conversion. uint8_t* dest = nullptr; FX_DWORD dest_size; uint8_t src[] = "12Ac>zzz"; EXPECT_EQ(5, HexDecode(src, 8, dest, dest_size)); EXPECT_EQ(2, dest_size); EXPECT_EQ(18, dest[0]); EXPECT_EQ(172, dest[1]); FX_Free(dest); } { // Non-multiple length. uint8_t* dest = nullptr; FX_DWORD dest_size; uint8_t src[] = "12A>zzz"; EXPECT_EQ(4, HexDecode(src, 8, dest, dest_size)); EXPECT_EQ(2, dest_size); EXPECT_EQ(18, dest[0]); EXPECT_EQ(160, dest[1]); FX_Free(dest); } { // Skips unknown characters. uint8_t* dest = nullptr; FX_DWORD dest_size; uint8_t src[] = "12tk \tAc>zzz"; EXPECT_EQ(10, HexDecode(src, 13, dest, dest_size)); EXPECT_EQ(2, dest_size); EXPECT_EQ(18, dest[0]); EXPECT_EQ(172, dest[1]); FX_Free(dest); } }