diff options
author | Tom Sepez <tsepez@chromium.org> | 2017-04-28 12:09:37 -0700 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-04-28 19:26:20 +0000 |
commit | 7e93a2c4f3279677ea31db81d85af70c7b3bff5a (patch) | |
tree | 1642c5f67eaa08de897a3c4147e9c806cac62131 | |
parent | 60cd033adf6c469ff47bdaf85a66b5817fdd188b (diff) | |
download | pdfium-7e93a2c4f3279677ea31db81d85af70c7b3bff5a.tar.xz |
CXFA_FMStringExpression: int16_t is not a good type for a string index.
Use early return while we're at it.
Bug: 716519
Change-Id: I4630d8b6121266c76a53f0171ba6dfd307da725a
Reviewed-on: https://pdfium-review.googlesource.com/4611
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
-rw-r--r-- | xfa/fxfa/fm2js/xfa_simpleexpression.cpp | 41 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp | 33 |
2 files changed, 54 insertions, 20 deletions
diff --git a/xfa/fxfa/fm2js/xfa_simpleexpression.cpp b/xfa/fxfa/fm2js/xfa_simpleexpression.cpp index 872fe7e2e8..fabdaa60f0 100644 --- a/xfa/fxfa/fm2js/xfa_simpleexpression.cpp +++ b/xfa/fxfa/fm2js/xfa_simpleexpression.cpp @@ -153,28 +153,29 @@ CXFA_FMStringExpression::~CXFA_FMStringExpression() {} void CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& javascript) { CFX_WideString tempStr(m_wsString); - if (tempStr.GetLength() > 2) { - javascript.AppendChar(L'\"'); - wchar_t oneChar; - for (int16_t i = 1; i < tempStr.GetLength() - 1; i++) { - oneChar = tempStr[i]; - switch (oneChar) { - case L'\"': { - i++; - javascript << L"\\\""; - } break; - case 0x0d: - break; - case 0x0a: { - javascript << L"\\n"; - } break; - default: { javascript.AppendChar(oneChar); } break; - } - } - javascript.AppendChar(L'\"'); - } else { + if (tempStr.GetLength() <= 2) { javascript << tempStr; + return; + } + javascript.AppendChar(L'\"'); + for (int32_t i = 1; i < tempStr.GetLength() - 1; i++) { + wchar_t oneChar = tempStr[i]; + switch (oneChar) { + case L'\"': + i++; + javascript << L"\\\""; + break; + case 0x0d: + break; + case 0x0a: + javascript << L"\\n"; + break; + default: + javascript.AppendChar(oneChar); + break; + } } + javascript.AppendChar(L'\"'); } CXFA_FMIdentifierExpression::CXFA_FMIdentifierExpression( diff --git a/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp b/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp index 160c4a12c4..b1b96e03d5 100644 --- a/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp +++ b/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp @@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "core/fxcrt/fx_string.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/test_support.h" #include "third_party/base/ptr_util.h" @@ -41,3 +42,35 @@ TEST(FMCallExpressionTest, more_than_32_arguments) { EXPECT_EQ(result.AsStringC(), js.AsStringC()); } + +TEST(FMStringExpressionTest, Empty) { + CFX_WideTextBuf accumulator; + CXFA_FMStringExpression(1, CFX_WideStringC()).ToJavaScript(accumulator); + EXPECT_EQ(L"", accumulator.AsStringC()); +} + +TEST(FMStringExpressionTest, Short) { + CFX_WideTextBuf accumulator; + CXFA_FMStringExpression(1, L"a").ToJavaScript(accumulator); + EXPECT_EQ(L"a", accumulator.AsStringC()); +} + +TEST(FMStringExpressionTest, Medium) { + CFX_WideTextBuf accumulator; + CXFA_FMStringExpression(1, L".abcd.").ToJavaScript(accumulator); + EXPECT_EQ(L"\"abcd\"", accumulator.AsStringC()); +} + +TEST(FMStringExpressionTest, Long) { + CFX_WideTextBuf accumulator; + std::vector<CFX_WideStringC::UnsignedType> vec(140000, L'A'); + CXFA_FMStringExpression(1, CFX_WideStringC(vec)).ToJavaScript(accumulator); + EXPECT_EQ(140000, accumulator.GetLength()); +} + +TEST(FMStringExpressionTest, Quoted) { + CFX_WideTextBuf accumulator; + CXFA_FMStringExpression(1, L".Simon says \"\"run\"\".") + .ToJavaScript(accumulator); + EXPECT_EQ(L"\"Simon says \\\"run\\\"\"", accumulator.AsStringC()); +} |