Index: fpdfsdk/src/fpdfdoc.cpp |
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp |
index 5d2469c160759f4a6521e8bdb96c0b138affd31d..6a1991d4e1c816c4f87851e8ec15a72417169b16 100644 |
--- a/fpdfsdk/src/fpdfdoc.cpp |
+++ b/fpdfsdk/src/fpdfdoc.cpp |
@@ -126,7 +126,8 @@ DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) { |
DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) { |
if (!pDict) |
- return 0; |
+ return PDFACTION_UNSUPPORTED; |
+ |
CPDF_Action action((CPDF_Dictionary*)pDict); |
CPDF_Action::ActionType type = action.GetType(); |
switch (type) { |
@@ -141,7 +142,6 @@ DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) { |
default: |
return PDFACTION_UNSUPPORTED; |
} |
- return PDFACTION_UNSUPPORTED; |
} |
DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, |
@@ -155,6 +155,20 @@ DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, |
return action.GetDest(pDoc).GetObject(); |
} |
+DLLEXPORT unsigned long STDCALL |
+FPDFAction_GetFilePath(FPDF_ACTION pDict, void* buffer, unsigned long buflen) { |
+ unsigned long type = FPDFAction_GetType(pDict); |
+ if (type != PDFACTION_REMOTEGOTO && type != PDFACTION_LAUNCH) |
+ return 0; |
+ |
+ CPDF_Action action((CPDF_Dictionary*)pDict); |
+ CFX_ByteString path = action.GetFilePath().UTF8Encode(); |
+ unsigned long len = path.GetLength() + 1; |
+ if (buffer && buflen >= len) |
jun_fang
2015/09/14 12:10:43
it should return 0 in 'else' rather than len.
Lei Zhang
2015/09/15 08:24:50
Are you saying I should write the following?
if (
jun_fang
2015/09/15 08:35:03
yes. For else cases, when buffer is null or buflen
Lei Zhang
2015/09/15 08:50:57
But returning 0 contradicts the comments section o
|
+ FXSYS_memcpy(buffer, path.c_str(), len); |
+ return len; |
+} |
+ |
DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, |
FPDF_ACTION pDict, |
void* buffer, |