Put std::string backing store in partition alloc
Use is low compared to stringstream, but fix one occurrence.
Change-Id: I2be7db4c9f4a55a91f6e4fda991712215998b6c1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/89192
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/stl_util.h b/core/fxcrt/stl_util.h
index d4ffde0..7b76f5e 100644
--- a/core/fxcrt/stl_util.h
+++ b/core/fxcrt/stl_util.h
@@ -47,6 +47,10 @@
return std::vector<T, A>(safe_size.ValueOrDie());
}
+// String that uses partition alloc for backing store.
+using string =
+ std::basic_string<char, std::char_traits<char>, FxStringAllocator<char>>;
+
// String stream that uses PartitionAlloc for backing store.
using ostringstream = std::
basic_ostringstream<char, std::char_traits<char>, FxStringAllocator<char>>;
diff --git a/core/fxcrt/stl_util_unittest.cpp b/core/fxcrt/stl_util_unittest.cpp
index 33b80f2..ab291a3 100644
--- a/core/fxcrt/stl_util_unittest.cpp
+++ b/core/fxcrt/stl_util_unittest.cpp
@@ -6,6 +6,19 @@
#include "testing/gtest/include/gtest/gtest.h"
+TEST(STLUtil, string) {
+ fxcrt::string str;
+ str += '2';
+ str += '2';
+ str += "C is ";
+ str += '7';
+ str += '1';
+ str += '.';
+ str += '6';
+ str += "F";
+ EXPECT_STREQ("22C is 71.6F", str.c_str());
+}
+
TEST(STLUtil, OStringStream) {
fxcrt::ostringstream str;
str << 22 << "C is " << 71.6f << "F";
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 39b3b82..dce96c4 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -21,6 +21,7 @@
#include "core/fpdfdoc/cpdf_formcontrol.h"
#include "core/fpdfdoc/cpdf_interactiveform.h"
#include "core/fxcrt/fx_extension.h"
+#include "core/fxcrt/stl_util.h"
#include "core/fxge/cfx_color.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_interactiveform.h"
@@ -118,12 +119,12 @@
// Make sure the number of precision characters will fit.
iDec = std::min(iDec, std::numeric_limits<double>::digits10);
- std::stringstream ss;
+ fxcrt::ostringstream ss;
ss << std::fixed << std::setprecision(iDec) << dValue;
- std::string value = ss.str();
+ fxcrt::string value = ss.str();
size_t pos = value.find('.');
*iDec2 = pdfium::base::checked_cast<int>(
- pos == std::string::npos ? value.size() : pos);
+ pos == fxcrt::string::npos ? value.size() : pos);
return ByteString(value.c_str());
}
#endif