summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdfsdk/javascript/util.cpp18
-rw-r--r--testing/resources/javascript/util_bytetochar.in76
-rw-r--r--testing/resources/javascript/util_bytetochar_expected.txt9
3 files changed, 96 insertions, 7 deletions
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index f7b2d7fbfa..0f50daf38c 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -446,13 +446,17 @@ FX_BOOL util::byteToChar(IJS_Context* cc,
const std::vector<CJS_Value>& params,
CJS_Value& vRet,
CFX_WideString& sError) {
- int iSize = params.size();
- if (iSize == 0)
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ if (params.size() < 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+ int arg = params[0].ToInt();
+ if (arg < 0 || arg > 255) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
return FALSE;
- int nByte = params[0].ToInt();
- unsigned char cByte = (unsigned char)nByte;
- CFX_WideString csValue;
- csValue.Format(L"%c", cByte);
- vRet = csValue.c_str();
+ }
+ CFX_WideString wStr(static_cast<FX_WCHAR>(arg));
+ vRet = wStr.c_str();
return TRUE;
}
diff --git a/testing/resources/javascript/util_bytetochar.in b/testing/resources/javascript/util_bytetochar.in
new file mode 100644
index 0000000000..a9adfbccaf
--- /dev/null
+++ b/testing/resources/javascript/util_bytetochar.in
@@ -0,0 +1,76 @@
+{{header}}
+{{object 1 0}} <<
+ /Type /Catalog
+ /Pages 2 0 R
+ /OpenAction 10 0 R
+>>
+endobj
+{{object 2 0}} <<
+ /Type /Pages
+ /Count 1
+ /Kids [
+ 3 0 R
+ ]
+>>
+endobj
+% Page number 0.
+{{object 3 0}} <<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources <<
+ /Font <</F1 15 0 R>>
+ >>
+ /Contents [21 0 R]
+ /MediaBox [0 0 612 792]
+>>
+% OpenAction action
+{{object 10 0}} <<
+ /Type /Action
+ /S /JavaScript
+ /JS 11 0 R
+>>
+endobj
+% JS program to exexute
+{{object 11 0}} <<
+>>
+stream
+function TestOneInput(x) {
+ try {
+ var s = util.byteToChar(x);
+ if (s.length) {
+ s = s.charCodeAt(0);
+ }
+ app.alert(x + " => " + s);
+ }
+ catch (e) {
+ app.alert(x + ": Caught error: " + e);
+ }
+}
+TestOneInput(0);
+TestOneInput(65);
+TestOneInput(127);
+TestOneInput(128);
+TestOneInput(255);
+TestOneInput(256);
+TestOneInput(40000000);
+TestOneInput(-1);
+try {
+ util.byteToChar();
+}
+catch (e) {
+ app.alert("Caught expected error: " + e);
+}
+try {
+ util.byteToChar({x:39});
+}
+catch (e) {
+ app.alert("Caught expected error: " + e);
+}
+endstream
+endobj
+{{xref}}
+trailer <<
+ /Root 1 0 R
+>>
+{{startxref}}
+%%EOF
diff --git a/testing/resources/javascript/util_bytetochar_expected.txt b/testing/resources/javascript/util_bytetochar_expected.txt
new file mode 100644
index 0000000000..df15ee7226
--- /dev/null
+++ b/testing/resources/javascript/util_bytetochar_expected.txt
@@ -0,0 +1,9 @@
+Alert: 0 =>
+Alert: 65 => 65
+Alert: 127 => 127
+Alert: 128 => 128
+Alert: 255 => 255
+Alert: 256: Caught error: util.byteToChar: Incorrect parameter value.
+Alert: 40000000: Caught error: util.byteToChar: Incorrect parameter value.
+Alert: -1: Caught error: util.byteToChar: Incorrect parameter value.
+Alert: Caught expected error: util.byteToChar: Incorrect number of parameters passed to function.