Remove dead code from CPDF_Metadata. Add missing nullptr check.
authorLei Zhang <thestig@chromium.org>
Tue, 11 Aug 2015 20:54:33 +0000 (13:54 -0700)
committerLei Zhang <thestig@chromium.org>
Tue, 11 Aug 2015 20:54:33 +0000 (13:54 -0700)
BUG=pdfium:117
R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/1282653002 .

core/include/fpdfdoc/fpdf_doc.h
core/src/fpdfdoc/doc_metadata.cpp
fpdfsdk/src/fpdf_ext.cpp

index 18dc7aa..13c5243 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <map>
 
+#include "../../../third_party/base/nonstd_unique_ptr.h"
 #include "../fpdfapi/fpdf_parser.h"
 #include "../fpdfapi/fpdf_render.h"
 
@@ -1151,23 +1152,19 @@ class CPDF_PageLabel {
  protected:
   CPDF_Document* m_pDocument;
 };
+
 class CPDF_Metadata {
  public:
-  CPDF_Metadata();
-
+  explicit CPDF_Metadata(CPDF_Document* pDoc);
   ~CPDF_Metadata();
 
-  void LoadDoc(CPDF_Document* pDoc);
-
-  int32_t GetString(const CFX_ByteStringC& bsItem, CFX_WideString& wsStr);
-
-  CXML_Element* GetRoot() const;
+  const CXML_Element* GetRoot() const;
 
-  CXML_Element* GetRDF() const;
-
- protected:
-  void* m_pData;
+ private:
+  CPDF_Document* const m_pDoc;  // Not owned.
+  nonstd::unique_ptr<CXML_Element> m_pXmlElement;
 };
+
 class CPDF_ViewerPreferences {
  public:
   CPDF_ViewerPreferences(CPDF_Document* pDoc);
index b617eec..c779f68 100644 (file)
 
 #include "../../include/fpdfdoc/fpdf_doc.h"
 #include "../../include/fxcrt/fx_xml.h"
-typedef struct _PDFDOC_METADATA {
-  CPDF_Document* m_pDoc;
-  CXML_Element* m_pXmlElmnt;
-  CXML_Element* m_pElmntRdf;
-  CFX_CMapByteStringToPtr* m_pStringMap;
-} PDFDOC_METADATA, *PDFDOC_LPMETADATA;
-typedef PDFDOC_METADATA const* PDFDOC_LPCMETADATA;
-const FX_CHAR* const gs_FPDFDOC_Metadata_Titles[] = {
-    "Title",      "title",        "Subject",      "description", "Author",
-    "creator",    "Keywords",     "Keywords",     "Producer",    "Producer",
-    "Creator",    "CreatorTool",  "CreationDate", "CreateDate",  "ModDate",
-    "ModifyDate", "MetadataDate", "MetadataDate"};
-CPDF_Metadata::CPDF_Metadata() {
-  m_pData = FX_Alloc(PDFDOC_METADATA, 1);
-  CFX_CMapByteStringToPtr*& pStringMap =
-      ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
-  pStringMap = new CFX_CMapByteStringToPtr;
-  CFX_ByteString bstr;
-  for (int i = 0; i < 18; i += 2) {
-    bstr = gs_FPDFDOC_Metadata_Titles[i];
-    pStringMap->AddValue(bstr, (void*)gs_FPDFDOC_Metadata_Titles[i + 1]);
-  }
-}
-CPDF_Metadata::~CPDF_Metadata() {
-  FXSYS_assert(m_pData != NULL);
-  CXML_Element*& p = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
-  delete p;
-  CFX_CMapByteStringToPtr* pStringMap =
-      ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
-  if (pStringMap) {
-    pStringMap->RemoveAll();
-    delete pStringMap;
-  }
-  FX_Free(m_pData);
-}
-void CPDF_Metadata::LoadDoc(CPDF_Document* pDoc) {
-  FXSYS_assert(pDoc != NULL);
-  ((PDFDOC_LPMETADATA)m_pData)->m_pDoc = pDoc;
+
+CPDF_Metadata::CPDF_Metadata(CPDF_Document* pDoc) : m_pDoc(pDoc) {
   CPDF_Dictionary* pRoot = pDoc->GetRoot();
+  if (!pRoot)
+    return;
+
   CPDF_Stream* pStream = pRoot->GetStream(FX_BSTRC("Metadata"));
-  if (!pStream) {
+  if (!pStream)
     return;
-  }
+
   CPDF_StreamAcc acc;
   acc.LoadAllData(pStream, FALSE);
-  int size = acc.GetSize();
-  const uint8_t* pBuf = acc.GetData();
-  CXML_Element*& pXmlElmnt = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
-  pXmlElmnt = CXML_Element::Parse(pBuf, size);
-  if (!pXmlElmnt) {
-    return;
-  }
-  CXML_Element*& pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
-  if (pXmlElmnt->GetTagName() == FX_BSTRC("RDF")) {
-    pElmntRdf = pXmlElmnt;
-  } else {
-    pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));
-  }
-}
-int32_t CPDF_Metadata::GetString(const CFX_ByteStringC& bsItem,
-                                 CFX_WideString& wsStr) {
-  if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) {
-    return -1;
-  }
-  if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap) {
-    return -1;
-  }
-  void* szTag;
-  if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap->Lookup(bsItem, szTag)) {
-    return -1;
-  }
-  CFX_ByteString bsTag = (const FX_CHAR*)szTag;
-  wsStr = L"";
-  CXML_Element* pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
-  if (!pElmntRdf) {
-    return -1;
-  }
-  int nChild = pElmntRdf->CountChildren();
-  for (int i = 0; i < nChild; i++) {
-    CXML_Element* pTag =
-        pElmntRdf->GetElement(NULL, FX_BSTRC("Description"), i);
-    if (!pTag) {
-      continue;
-    }
-    if (bsItem == FX_BSTRC("Title") || bsItem == FX_BSTRC("Subject")) {
-      CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
-      if (!pElmnt) {
-        continue;
-      }
-      pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Alt"));
-      if (!pElmnt) {
-        continue;
-      }
-      pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
-      if (!pElmnt) {
-        continue;
-      }
-      wsStr = pElmnt->GetContent(0);
-      return wsStr.GetLength();
-    }
-    if (bsItem == FX_BSTRC("Author")) {
-      CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
-      if (!pElmnt) {
-        continue;
-      }
-      pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Seq"));
-      if (!pElmnt) {
-        continue;
-      }
-      pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
-      if (!pElmnt) {
-        continue;
-      }
-      wsStr = pElmnt->GetContent(0);
-      return wsStr.GetLength();
-    }
-    CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
-    if (!pElmnt) {
-      continue;
-    }
-    wsStr = pElmnt->GetContent(0);
-    return wsStr.GetLength();
-  }
-  return -1;
-}
-CXML_Element* CPDF_Metadata::GetRoot() const {
-  return ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+  m_pXmlElement.reset(CXML_Element::Parse(acc.GetData(), acc.GetSize()));
 }
-CXML_Element* CPDF_Metadata::GetRDF() const {
-  return ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+
+CPDF_Metadata::~CPDF_Metadata() {}
+
+const CXML_Element* CPDF_Metadata::GetRoot() const {
+  return m_pXmlElement.get();
 }
index e95a2f0..2d84ff2 100644 (file)
@@ -88,7 +88,7 @@ void CheckUnSupportAnnot(CPDF_Document* pDoc, CPDF_Annot* pPDFAnnot) {
   }
 }
 
-FX_BOOL CheckSharedForm(CXML_Element* pElement, CFX_ByteString cbName) {
+FX_BOOL CheckSharedForm(const CXML_Element* pElement, CFX_ByteString cbName) {
   int count = pElement->CountAttrs();
   int i = 0;
   for (i = 0; i < count; i++) {
@@ -169,9 +169,8 @@ void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code) {
   }
 
   // SharedForm
-  CPDF_Metadata metaData;
-  metaData.LoadDoc(pDoc);
-  CXML_Element* pElement = metaData.GetRoot();
+  CPDF_Metadata metaData(pDoc);
+  const CXML_Element* pElement = metaData.GetRoot();
   if (pElement)
     CheckSharedForm(pElement, "workflowType");