Index: fpdfsdk/src/javascript/PublicMethods.cpp |
diff --git a/fpdfsdk/src/javascript/PublicMethods.cpp b/fpdfsdk/src/javascript/PublicMethods.cpp |
index 55228687bcf86bb394b1e0efcee917fb48044501..08d5cb707ce3a52733b0ba275284c6ab47f649d9 100644 |
--- a/fpdfsdk/src/javascript/PublicMethods.cpp |
+++ b/fpdfsdk/src/javascript/PublicMethods.cpp |
@@ -924,10 +924,10 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideStr |
int nSec = JS_GetSecFromTime(dDate); |
int i = 0; |
- FX_WCHAR c; |
while (i < format.GetLength()) |
{ |
- c = format.GetAt(i); |
+ FX_WCHAR c = format.GetAt(i); |
+ int remaining = format.GetLength() - i - 1; |
sPart = L""; |
switch (c) |
{ |
@@ -939,7 +939,7 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideStr |
case 'M': |
case 's': |
case 't': |
- if (format.GetAt(i+1) != c) |
+ if (remaining == 0 || format.GetAt(i+1) != c) |
{ |
switch (c) |
{ |
@@ -964,13 +964,13 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideStr |
case 's': |
sPart.Format((FX_LPCWSTR)L"%d",nSec); |
break; |
- case 't': |
+ case 't': |
sPart += nHour>12?'p':'a'; |
break; |
- } |
+ } |
i++; |
} |
- else if (format.GetAt(i+1) == c && format.GetAt(i+2) != c) |
+ else if (remaining == 1 || format.GetAt(i+2) != c) |
{ |
switch (c) |
{ |
@@ -995,14 +995,14 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideStr |
case 's': |
sPart.Format((FX_LPCWSTR)L"%02d",nSec); |
break; |
- case 't': |
+ case 't': |
sPart = nHour>12? (FX_LPCWSTR)L"pm": (FX_LPCWSTR)L"am"; |
break; |
- } |
+ } |
i+=2; |
} |
- else if (format.GetAt(i+1) == c && format.GetAt(i+2) == c && format.GetAt(i+3) != c) |
- { |
+ else if (remaining == 2 || format.GetAt(i+3) != c) |
+ { |
switch (c) |
{ |
case 'm': |
@@ -1016,16 +1016,16 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideStr |
sPart += c; |
sPart += c; |
break; |
- } |
+ } |
} |
- else if (format.GetAt(i+1) == c && format.GetAt(i+2) == c && format.GetAt(i+3) == c && format.GetAt(i+4) != c) |
+ else if (remaining == 3 || format.GetAt(i+4) != c) |
{ |
switch (c) |
{ |
case 'y': |
sPart.Format((FX_LPCWSTR)L"%04d",nYear); |
i += 4; |
- break; |
+ break; |
case 'm': |
i+=4; |
if (nMonth > 0&&nMonth <= 12) |
@@ -1038,20 +1038,20 @@ CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideStr |
sPart += c; |
sPart += c; |
break; |
- } |
+ } |
} |
else |
{ |
i++; |
sPart += c; |
} |
- break; |
+ break; |
default: |
i++; |
sPart += c; |
break; |
} |
- |
+ |
sRet += sPart; |
} |