| Index: fpdfsdk/src/fpdfdoc.cpp
 | 
| diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
 | 
| index 19ca06ca276416e0df34c3f7e432b423ca910cc1..ab2351f9d8102912ffce7709bcc7c97f7238ca2f 100644
 | 
| --- a/fpdfsdk/src/fpdfdoc.cpp
 | 
| +++ b/fpdfsdk/src/fpdfdoc.cpp
 | 
| @@ -7,118 +7,122 @@
 | 
|  #include "../include/fsdk_define.h"
 | 
|  #include "../include/fpdfdoc.h"
 | 
|  
 | 
| -static int this_module = 0;
 | 
| +static int THISMODULE = 0;
 | 
|  
 | 
| -static CPDF_Bookmark FindBookmark(CPDF_BookmarkTree& tree, CPDF_Bookmark This, const CFX_WideString& title)
 | 
| +static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, CPDF_Bookmark bookmark, const CFX_WideString& title)
 | 
|  {
 | 
| -	if (This != NULL) {
 | 
| +	if (bookmark && bookmark.GetTitle().CompareNoCase(title) == 0) {
 | 
|  		// First check this item
 | 
| -		CFX_WideString this_title = This.GetTitle();
 | 
| -		if (this_title.CompareNoCase(title) == 0)
 | 
| -			return This;
 | 
| +		return bookmark;
 | 
|  	}
 | 
|  	// go into children items
 | 
| -	CPDF_Bookmark Child = tree.GetFirstChild(This);
 | 
| -	while (Child != NULL) {
 | 
| +	CPDF_Bookmark child = tree.GetFirstChild(bookmark);
 | 
| +	while (child) {
 | 
|  		// check if this item
 | 
| -		CPDF_Bookmark Found = FindBookmark(tree, Child, title);
 | 
| -		if (Found) return Found;
 | 
| -		Child = tree.GetNextSibling(Child);
 | 
| +		CPDF_Bookmark found = FindBookmark(tree, child, title);
 | 
| +		if (found)
 | 
| +			return found;
 | 
| +		child = tree.GetNextSibling(child);
 | 
|  	}
 | 
| -	return NULL;
 | 
| +	return CPDF_Bookmark();
 | 
|  }
 | 
|  
 | 
|  DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title)
 | 
|  {
 | 
| -	if (document == NULL) return NULL;
 | 
| -	if (title == NULL || title[0] == 0) return NULL;
 | 
| -
 | 
| +	if (!document)
 | 
| +		return NULL;
 | 
| +	if (!title || title[0] == 0)
 | 
| +		return NULL;
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)document;
 | 
|  	CPDF_BookmarkTree tree(pDoc);
 | 
| -
 | 
|  	FX_STRSIZE len = CFX_WideString::WStringLength(title);
 | 
| -	CFX_WideString wstr = CFX_WideString::FromUTF16LE(title, len);
 | 
| -	return FindBookmark(tree, NULL, wstr);
 | 
| +	CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len);
 | 
| +	return FindBookmark(tree, CPDF_Bookmark(), encodedTitle).GetDict();
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark)
 | 
| +DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict)
 | 
|  {
 | 
| -	if (document == NULL) return NULL;
 | 
| -	if (bookmark == NULL) return NULL;
 | 
| -
 | 
| -	CPDF_Bookmark Bookmark = (CPDF_Dictionary*)bookmark;
 | 
| +	if (!document)
 | 
| +		return NULL;
 | 
| +	if (!pDict)
 | 
| +		return NULL;
 | 
| +	CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)document;
 | 
| -	CPDF_Dest dest = Bookmark.GetDest(pDoc);
 | 
| -	if (dest != NULL) return dest;
 | 
| -
 | 
| +	CPDF_Dest dest = bookmark.GetDest(pDoc);
 | 
| +	if (dest)
 | 
| +		return dest;
 | 
|  	// If this bookmark is not directly associated with a dest, we try to get action
 | 
| -	CPDF_Action Action = Bookmark.GetAction();
 | 
| -	if (Action == NULL) return NULL;
 | 
| -	return Action.GetDest(pDoc);
 | 
| +	CPDF_Action action = bookmark.GetAction();
 | 
| +	if (!action)
 | 
| +		return NULL;
 | 
| +	return action.GetDest(pDoc);
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark)
 | 
| +DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict)
 | 
|  {
 | 
| -	if (bookmark == NULL) return NULL;
 | 
| -
 | 
| -	CPDF_Bookmark Bookmark = (CPDF_Dictionary*)bookmark;
 | 
| -	return Bookmark.GetAction();
 | 
| +	if (!pDict)
 | 
| +		return NULL;
 | 
| +	CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
 | 
| +	return bookmark.GetAction();
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION action)
 | 
| +DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict)
 | 
|  {
 | 
| -	if (action == NULL) return 0;
 | 
| -
 | 
| -	CPDF_Action Action = (CPDF_Dictionary*)action;
 | 
| -	CPDF_Action::ActionType type = Action.GetType();
 | 
| +	if (!pDict)
 | 
| +		return 0;
 | 
| +	CPDF_Action action = (CPDF_Dictionary*)pDict;
 | 
| +	CPDF_Action::ActionType type = action.GetType();
 | 
|  	switch (type) {
 | 
| -	case CPDF_Action::GoTo:
 | 
| -		return PDFACTION_GOTO;
 | 
| -	case CPDF_Action::GoToR:
 | 
| -		return PDFACTION_REMOTEGOTO;
 | 
| -	case CPDF_Action::URI:
 | 
| -		return PDFACTION_URI;
 | 
| -	case CPDF_Action::Launch:
 | 
| -		return PDFACTION_LAUNCH;
 | 
| -	default:
 | 
| -		return PDFACTION_UNSUPPORTED;
 | 
| +		case CPDF_Action::GoTo:
 | 
| +			return PDFACTION_GOTO;
 | 
| +		case CPDF_Action::GoToR:
 | 
| +			return PDFACTION_REMOTEGOTO;
 | 
| +		case CPDF_Action::URI:
 | 
| +			return PDFACTION_URI;
 | 
| +		case CPDF_Action::Launch:
 | 
| +			return PDFACTION_LAUNCH;
 | 
| +		default:
 | 
| +			return PDFACTION_UNSUPPORTED;
 | 
|  	}
 | 
|  	return PDFACTION_UNSUPPORTED;
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION action)
 | 
| +DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION pDict)
 | 
|  {
 | 
| -	if (document == NULL) return NULL;
 | 
| -	if (action == NULL) return NULL;
 | 
| +	if (!document)
 | 
| +		return NULL;
 | 
| +	if (!pDict)
 | 
| +		return NULL;
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)document;
 | 
| -	CPDF_Action Action = (CPDF_Dictionary*)action;
 | 
| -
 | 
| -	return Action.GetDest(pDoc);
 | 
| +	CPDF_Action action = (CPDF_Dictionary*)pDict;
 | 
| +	return action.GetDest(pDoc);
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION action, 
 | 
| +DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION pDict,
 | 
|  											  void* buffer, unsigned long buflen)
 | 
|  {
 | 
| -	if (document == NULL) return 0;
 | 
| -	if (action == NULL) return 0;
 | 
| +	if (!document)
 | 
| +		return 0;
 | 
| +	if (!pDict)
 | 
| +		return 0;
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)document;
 | 
| -	CPDF_Action Action = (CPDF_Dictionary*)action;
 | 
| -
 | 
| -	CFX_ByteString path = Action.GetURI(pDoc);
 | 
| +	CPDF_Action action = (CPDF_Dictionary*)pDict;
 | 
| +	CFX_ByteString path = action.GetURI(pDoc);
 | 
|  	unsigned long len = path.GetLength() + 1;
 | 
|  	if (buffer != NULL && buflen >= len)
 | 
|  		FXSYS_memcpy(buffer, path.c_str(), len);
 | 
|  	return len;
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest)
 | 
| +DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDict)
 | 
|  {
 | 
| -	if (document == NULL) return 0;
 | 
| -	if (dest == NULL) return 0;
 | 
| +	if (!document)
 | 
| +		return 0;
 | 
| +	if (!pDict)
 | 
| +		return 0;
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)document;
 | 
| -	CPDF_Dest Dest = (CPDF_Array*)dest;
 | 
| -
 | 
| -	return Dest.GetPageIndex(pDoc);
 | 
| +	CPDF_Dest dest = (CPDF_Array*)pDict;
 | 
| +	return dest.GetPageIndex(pDoc);
 | 
|  }
 | 
|  
 | 
|  static void ReleaseLinkList(FX_LPVOID data)
 | 
| @@ -128,42 +132,44 @@ static void ReleaseLinkList(FX_LPVOID data)
 | 
|  
 | 
|  DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y)
 | 
|  {
 | 
| -	if (page == NULL) return NULL;
 | 
| +	if (!page)
 | 
| +		return NULL;
 | 
|  	CPDF_Page* pPage = (CPDF_Page*)page;
 | 
| -
 | 
|  	// Link list is stored with the document
 | 
|  	CPDF_Document* pDoc = pPage->m_pDocument;
 | 
| -	CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&this_module);
 | 
| -	if (pLinkList == NULL) {
 | 
| +	CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE);
 | 
| +	if (!pLinkList) {
 | 
|  		pLinkList = FX_NEW CPDF_LinkList(pDoc);
 | 
| -		pDoc->SetPrivateData(&this_module, pLinkList, ReleaseLinkList);
 | 
| +		pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList);
 | 
|  	}
 | 
| -
 | 
|  	return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y);
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK link)
 | 
| +DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK pDict)
 | 
|  {
 | 
| -	if (document == NULL) return NULL;
 | 
| +	if (!document)
 | 
| +		return NULL;
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)document;
 | 
| -	if (link == NULL) return NULL;
 | 
| -	CPDF_Link Link = (CPDF_Dictionary*)link;
 | 
| -
 | 
| -	FPDF_DEST dest = Link.GetDest(pDoc);
 | 
| -	if (dest) return dest;
 | 
| +	if (!pDict)
 | 
| +		return NULL;
 | 
| +	CPDF_Link link = (CPDF_Dictionary*)pDict;
 | 
|  
 | 
| +	FPDF_DEST dest = link.GetDest(pDoc);
 | 
| +	if (dest)
 | 
| +		return dest;
 | 
|  	// If this link is not directly associated with a dest, we try to get action
 | 
| -	CPDF_Action Action = Link.GetAction();
 | 
| -	if (Action == NULL) return NULL;
 | 
| -	return Action.GetDest(pDoc);
 | 
| +	CPDF_Action action = link.GetAction();
 | 
| +	if (!action)
 | 
| +		return NULL;
 | 
| +	return action.GetDest(pDoc);
 | 
|  }
 | 
|  
 | 
| -DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK link)
 | 
| +DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict)
 | 
|  {
 | 
| -	if (link == NULL) return NULL;
 | 
| -	CPDF_Link Link = (CPDF_Dictionary*)link;
 | 
| -
 | 
| -	return Link.GetAction();
 | 
| +	if (!pDict)
 | 
| +		return NULL;
 | 
| +	CPDF_Link link = (CPDF_Dictionary*)pDict;
 | 
| +	return link.GetAction();
 | 
|  }
 | 
|  
 | 
|  DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FPDF_LINK* linkAnnot)
 | 
| @@ -171,15 +177,17 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FP
 | 
|  	if(!page || !startPos || !linkAnnot)
 | 
|  		return FALSE;
 | 
|  	CPDF_Page* pPage = (CPDF_Page*)page;
 | 
| -	if(!pPage->m_pFormDict) return FALSE;
 | 
| +	if(!pPage->m_pFormDict)
 | 
| +		return FALSE;
 | 
|  	CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots");
 | 
| -	if(!pAnnots) return FALSE;
 | 
| -	for (int i = *startPos; i < (int)pAnnots->GetCount(); i ++) {
 | 
| +	if(!pAnnots)
 | 
| +		return FALSE;
 | 
| +	for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) {
 | 
|  		CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i);
 | 
| -		if (pDict == NULL || pDict->GetType() != PDFOBJ_DICTIONARY) continue;
 | 
| -		if(pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link")))
 | 
| -		{
 | 
| -			*startPos = i+1;
 | 
| +		if (!pDict || pDict->GetType() != PDFOBJ_DICTIONARY)
 | 
| +			continue;
 | 
| +		if(pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) {
 | 
| +			*startPos = i + 1;
 | 
|  			*linkAnnot = (FPDF_LINK)pDict; 
 | 
|  			return TRUE;
 | 
|  		}
 | 
| @@ -206,7 +214,7 @@ DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot)
 | 
|  		return 0;
 | 
|  	CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
 | 
|  	CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints"));
 | 
| -	if (pArray == NULL)
 | 
| +	if (!pArray)
 | 
|  		return 0;
 | 
|  	else
 | 
|  		return pArray->GetCount() / 8;
 | 
| @@ -219,8 +227,8 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quad
 | 
|  	CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
 | 
|  	CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints"));
 | 
|  	if (pArray) {
 | 
| -		if (0 > quadIndex || quadIndex >= (int)pArray->GetCount()/8 ||
 | 
| -			((quadIndex*8+7) >= (int)pArray->GetCount())) return FALSE;
 | 
| +		if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount()/8 || ((quadIndex*8+7) >= (int)pArray->GetCount()))
 | 
| +			return FALSE;
 | 
|  		quadPoints->x1 = pArray->GetNumber(quadIndex*8);
 | 
|  		quadPoints->y1 = pArray->GetNumber(quadIndex*8+1);
 | 
|  		quadPoints->x2 = pArray->GetNumber(quadIndex*8+2);
 | 
| @@ -234,27 +242,25 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quad
 | 
|  	return FALSE;
 | 
|  }
 | 
|  
 | 
| -
 | 
|  DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, FPDF_BYTESTRING tag,
 | 
|  												 void* buffer, unsigned long buflen)
 | 
|  {
 | 
| -	if (doc == NULL || tag == NULL) return 0;
 | 
| -
 | 
| +	if (!doc || !tag)
 | 
| +		return 0;
 | 
|  	CPDF_Document* pDoc = (CPDF_Document*)doc;
 | 
|  	// Get info dictionary
 | 
|  	CPDF_Dictionary* pInfo = pDoc->GetInfo();
 | 
| -	if (pInfo == NULL) return 0;
 | 
| -
 | 
| +	if (!pInfo)
 | 
| +		return 0;
 | 
|  	CFX_WideString text = pInfo->GetUnicodeText(tag);
 | 
| -
 | 
|  	// Use UTF-16LE encoding
 | 
| -	CFX_ByteString bstr = text.UTF16LE_Encode();
 | 
| -	unsigned long len = bstr.GetLength();
 | 
| -	if (buffer != NULL && buflen >= len+2) {
 | 
| -		FXSYS_memcpy(buffer, bstr.c_str(), len);
 | 
| +	CFX_ByteString encodedText = text.UTF16LE_Encode();
 | 
| +	unsigned long len = encodedText.GetLength();
 | 
| +	if (buffer && buflen >= len + 2) {
 | 
| +		FXSYS_memcpy(buffer, encodedText.c_str(), len);
 | 
|  		// use double zero as trailer
 | 
| -		((FX_BYTE*)buffer)[len] = ((FX_BYTE*)buffer)[len+1] = 0;
 | 
| +		((FX_BYTE*)buffer)[len] = 0;
 | 
| +		((FX_BYTE*)buffer)[len + 1] = 0;
 | 
|  	}
 | 
|  	return len+2;
 | 
|  }
 | 
| -
 | 
| 
 |