| OLD | NEW | 
|---|
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 
| 6 | 6 | 
| 7 #include "../../../include/fpdfapi/fpdf_parser.h" | 7 #include "../../../include/fpdfapi/fpdf_parser.h" | 
| 8 const char PDF_CharType[256] = { | 8 const char PDF_CharType[256] = { | 
| 9   //NUL  SOH  STX  ETX  EOT  ENQ  ACK  BEL  BS   HT   LF   VT   FF   CR   SO   S
     I | 9   //NUL  SOH  STX  ETX  EOT  ENQ  ACK  BEL  BS   HT   LF   VT   FF   CR   SO   S
     I | 
| 10     'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R', '
     R', | 10     'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R', '
     R', | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 36     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 36     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 
| 37     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 37     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 
| 38     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 38     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 
| 39     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 39     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     R', | 
| 40     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     W' | 40     'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', '
     W' | 
| 41 }; | 41 }; | 
| 42 | 42 | 
| 43 #ifndef MAX_PATH | 43 #ifndef MAX_PATH | 
| 44 #define MAX_PATH 4096 | 44 #define MAX_PATH 4096 | 
| 45 #endif | 45 #endif | 
| 46 CPDF_SimpleParser::CPDF_SimpleParser(FX_LPCBYTE pData, FX_DWORD dwSize) | 46 CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize) | 
| 47 { | 47 { | 
| 48     m_pData = pData; | 48     m_pData = pData; | 
| 49     m_dwSize = dwSize; | 49     m_dwSize = dwSize; | 
| 50     m_dwCurPos = 0; | 50     m_dwCurPos = 0; | 
| 51 } | 51 } | 
| 52 CPDF_SimpleParser::CPDF_SimpleParser(FX_BSTR str) | 52 CPDF_SimpleParser::CPDF_SimpleParser(FX_BSTR str) | 
| 53 { | 53 { | 
| 54     m_pData = str.GetPtr(); | 54     m_pData = str.GetPtr(); | 
| 55     m_dwSize = str.GetLength(); | 55     m_dwSize = str.GetLength(); | 
| 56     m_dwCurPos = 0; | 56     m_dwCurPos = 0; | 
| 57 } | 57 } | 
| 58 void CPDF_SimpleParser::ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& typ
     e) | 58 void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int&
      type) | 
| 59 { | 59 { | 
| 60     pStart = NULL; | 60     pStart = NULL; | 
| 61     dwSize = 0; | 61     dwSize = 0; | 
| 62     type = PDFWORD_EOF; | 62     type = PDFWORD_EOF; | 
| 63     uint8_t ch; | 63     uint8_t ch; | 
| 64     char chartype; | 64     char chartype; | 
| 65     while (1) { | 65     while (1) { | 
| 66         if (m_dwSize <= m_dwCurPos) { | 66         if (m_dwSize <= m_dwCurPos) { | 
| 67             return; | 67             return; | 
| 68         } | 68         } | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 146         chartype = PDF_CharType[ch]; | 146         chartype = PDF_CharType[ch]; | 
| 147         if (chartype == 'D' || chartype == 'W') { | 147         if (chartype == 'D' || chartype == 'W') { | 
| 148             m_dwCurPos --; | 148             m_dwCurPos --; | 
| 149             break; | 149             break; | 
| 150         } | 150         } | 
| 151         dwSize ++; | 151         dwSize ++; | 
| 152     } | 152     } | 
| 153 } | 153 } | 
| 154 CFX_ByteStringC CPDF_SimpleParser::GetWord() | 154 CFX_ByteStringC CPDF_SimpleParser::GetWord() | 
| 155 { | 155 { | 
| 156     FX_LPCBYTE pStart; | 156     const uint8_t* pStart; | 
| 157     FX_DWORD dwSize; | 157     FX_DWORD dwSize; | 
| 158     int type; | 158     int type; | 
| 159     ParseWord(pStart, dwSize, type); | 159     ParseWord(pStart, dwSize, type); | 
| 160     if (dwSize == 1 && pStart[0] == '<') { | 160     if (dwSize == 1 && pStart[0] == '<') { | 
| 161         while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') { | 161         while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') { | 
| 162             m_dwCurPos ++; | 162             m_dwCurPos ++; | 
| 163         } | 163         } | 
| 164         if (m_dwCurPos < m_dwSize) { | 164         if (m_dwCurPos < m_dwSize) { | 
| 165             m_dwCurPos ++; | 165             m_dwCurPos ++; | 
| 166         } | 166         } | 
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 283         return ch - 'a' + 10; | 283         return ch - 'a' + 10; | 
| 284     } | 284     } | 
| 285     if (ch >= 'A' && ch <= 'F') { | 285     if (ch >= 'A' && ch <= 'F') { | 
| 286         return ch - 'A' + 10; | 286         return ch - 'A' + 10; | 
| 287     } | 287     } | 
| 288     return 0; | 288     return 0; | 
| 289 } | 289 } | 
| 290 CFX_ByteString PDF_NameDecode(FX_BSTR bstr) | 290 CFX_ByteString PDF_NameDecode(FX_BSTR bstr) | 
| 291 { | 291 { | 
| 292     int size = bstr.GetLength(); | 292     int size = bstr.GetLength(); | 
| 293     FX_LPCSTR pSrc = bstr.GetCStr(); | 293     const FX_CHAR* pSrc = bstr.GetCStr(); | 
| 294     if (FXSYS_memchr(pSrc, '#', size) == NULL) { | 294     if (FXSYS_memchr(pSrc, '#', size) == NULL) { | 
| 295         return bstr; | 295         return bstr; | 
| 296     } | 296     } | 
| 297     CFX_ByteString result; | 297     CFX_ByteString result; | 
| 298     FX_LPSTR pDestStart = result.GetBuffer(size); | 298     FX_CHAR* pDestStart = result.GetBuffer(size); | 
| 299     FX_LPSTR pDest = pDestStart; | 299     FX_CHAR* pDest = pDestStart; | 
| 300     for (int i = 0; i < size; i ++) { | 300     for (int i = 0; i < size; i ++) { | 
| 301         if (pSrc[i] == '#' && i < size - 2) { | 301         if (pSrc[i] == '#' && i < size - 2) { | 
| 302             *pDest ++ = _hex2dec(pSrc[i + 1]) * 16 + _hex2dec(pSrc[i + 2]); | 302             *pDest ++ = _hex2dec(pSrc[i + 1]) * 16 + _hex2dec(pSrc[i + 2]); | 
| 303             i += 2; | 303             i += 2; | 
| 304         } else { | 304         } else { | 
| 305             *pDest ++ = pSrc[i]; | 305             *pDest ++ = pSrc[i]; | 
| 306         } | 306         } | 
| 307     } | 307     } | 
| 308     result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart)); | 308     result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart)); | 
| 309     return result; | 309     return result; | 
| 310 } | 310 } | 
| 311 CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) | 311 CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) | 
| 312 { | 312 { | 
| 313     if (FXSYS_memchr(orig.c_str(), '#', orig.GetLength()) == NULL) { | 313     if (FXSYS_memchr(orig.c_str(), '#', orig.GetLength()) == NULL) { | 
| 314         return orig; | 314         return orig; | 
| 315     } | 315     } | 
| 316     return PDF_NameDecode(CFX_ByteStringC(orig)); | 316     return PDF_NameDecode(CFX_ByteStringC(orig)); | 
| 317 } | 317 } | 
| 318 CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) | 318 CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) | 
| 319 { | 319 { | 
| 320     FX_LPBYTE src_buf = (FX_LPBYTE)orig.c_str(); | 320     uint8_t* src_buf = (uint8_t*)orig.c_str(); | 
| 321     int src_len = orig.GetLength(); | 321     int src_len = orig.GetLength(); | 
| 322     int dest_len = 0; | 322     int dest_len = 0; | 
| 323     int i; | 323     int i; | 
| 324     for (i = 0; i < src_len; i ++) { | 324     for (i = 0; i < src_len; i ++) { | 
| 325         uint8_t ch = src_buf[i]; | 325         uint8_t ch = src_buf[i]; | 
| 326         if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' || | 326         if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' || | 
| 327                 PDF_CharType[ch] == 'D') { | 327                 PDF_CharType[ch] == 'D') { | 
| 328             dest_len += 3; | 328             dest_len += 3; | 
| 329         } else { | 329         } else { | 
| 330             dest_len ++; | 330             dest_len ++; | 
| 331         } | 331         } | 
| 332     } | 332     } | 
| 333     if (dest_len == src_len) { | 333     if (dest_len == src_len) { | 
| 334         return orig; | 334         return orig; | 
| 335     } | 335     } | 
| 336     CFX_ByteString res; | 336     CFX_ByteString res; | 
| 337     FX_LPSTR dest_buf = res.GetBuffer(dest_len); | 337     FX_CHAR* dest_buf = res.GetBuffer(dest_len); | 
| 338     dest_len = 0; | 338     dest_len = 0; | 
| 339     for (i = 0; i < src_len; i ++) { | 339     for (i = 0; i < src_len; i ++) { | 
| 340         uint8_t ch = src_buf[i]; | 340         uint8_t ch = src_buf[i]; | 
| 341         if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' || | 341         if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' || | 
| 342                 PDF_CharType[ch] == 'D') { | 342                 PDF_CharType[ch] == 'D') { | 
| 343             dest_buf[dest_len++] = '#'; | 343             dest_buf[dest_len++] = '#'; | 
| 344             dest_buf[dest_len++] = "0123456789ABCDEF"[ch / 16]; | 344             dest_buf[dest_len++] = "0123456789ABCDEF"[ch / 16]; | 
| 345             dest_buf[dest_len++] = "0123456789ABCDEF"[ch % 16]; | 345             dest_buf[dest_len++] = "0123456789ABCDEF"[ch % 16]; | 
| 346         } else { | 346         } else { | 
| 347             dest_buf[dest_len++] = ch; | 347             dest_buf[dest_len++] = ch; | 
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 470         if (pFound) { | 470         if (pFound) { | 
| 471             return pFound; | 471             return pFound; | 
| 472         } | 472         } | 
| 473     } | 473     } | 
| 474     return NULL; | 474     return NULL; | 
| 475 } | 475 } | 
| 476 CPDF_Object* CPDF_NumberTree::LookupValue(int num) | 476 CPDF_Object* CPDF_NumberTree::LookupValue(int num) | 
| 477 { | 477 { | 
| 478     return SearchNumberNode(m_pRoot, num); | 478     return SearchNumberNode(m_pRoot, num); | 
| 479 } | 479 } | 
| OLD | NEW | 
|---|