Home | History | Annotate | Download | only in fpdf_parser
      1 // Copyright 2015 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "core/include/fpdfapi/fpdf_parser.h"
      6 #include "testing/gtest/include/gtest/gtest.h"
      7 
      8 TEST(fpdf_parser_decode, HexDecode) {
      9   {
     10     // Empty src string.
     11     uint8_t* dest = nullptr;
     12     FX_DWORD dest_size;
     13     uint8_t src[] = "";
     14     EXPECT_EQ(0, HexDecode(src, 0, dest, dest_size));
     15     EXPECT_EQ(0, dest_size);
     16     EXPECT_EQ('\0', dest[0]);
     17     FX_Free(dest);
     18   }
     19 
     20   {
     21     // Regular conversion.
     22     uint8_t* dest = nullptr;
     23     FX_DWORD dest_size;
     24     uint8_t src[] = "12Ac>zzz";
     25     EXPECT_EQ(5, HexDecode(src, 8, dest, dest_size));
     26     EXPECT_EQ(2, dest_size);
     27     EXPECT_EQ(18, dest[0]);
     28     EXPECT_EQ(172, dest[1]);
     29     FX_Free(dest);
     30   }
     31 
     32   {
     33     // Non-multiple length.
     34     uint8_t* dest = nullptr;
     35     FX_DWORD dest_size;
     36     uint8_t src[] = "12A>zzz";
     37     EXPECT_EQ(4, HexDecode(src, 8, dest, dest_size));
     38     EXPECT_EQ(2, dest_size);
     39     EXPECT_EQ(18, dest[0]);
     40     EXPECT_EQ(160, dest[1]);
     41     FX_Free(dest);
     42   }
     43 
     44   {
     45     // Skips unknown characters.
     46     uint8_t* dest = nullptr;
     47     FX_DWORD dest_size;
     48     uint8_t src[] = "12tk  \tAc>zzz";
     49     EXPECT_EQ(10, HexDecode(src, 13, dest, dest_size));
     50     EXPECT_EQ(2, dest_size);
     51     EXPECT_EQ(18, dest[0]);
     52     EXPECT_EQ(172, dest[1]);
     53     FX_Free(dest);
     54   }
     55 }
     56