summaryrefslogtreecommitdiff
path: root/core/fpdfapi/page
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/page')
-rw-r--r--core/fpdfapi/page/cpdf_streamcontentparser.cpp31
-rw-r--r--core/fpdfapi/page/cpdf_streamcontentparser.h9
2 files changed, 16 insertions, 24 deletions
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 2244232ecb..20892cc264 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -338,7 +338,7 @@ void CPDF_StreamContentParser::AddNameParam(const ByteStringView& bsName) {
void CPDF_StreamContentParser::AddNumberParam(const ByteStringView& str) {
ContentParam& param = m_ParamBuf[GetNextParamPos()];
param.m_Type = ContentParam::NUMBER;
- param.m_Number.m_bInteger = FX_atonum(str, &param.m_Number.m_Integer);
+ param.m_Number = FX_Number(str);
}
void CPDF_StreamContentParser::AddObjectParam(
@@ -373,9 +373,9 @@ CPDF_Object* CPDF_StreamContentParser::GetObject(uint32_t index) {
if (param.m_Type == ContentParam::NUMBER) {
param.m_Type = ContentParam::OBJECT;
param.m_pObject =
- param.m_Number.m_bInteger
- ? pdfium::MakeUnique<CPDF_Number>(param.m_Number.m_Integer)
- : pdfium::MakeUnique<CPDF_Number>(param.m_Number.m_Float);
+ param.m_Number.IsInteger()
+ ? pdfium::MakeUnique<CPDF_Number>(param.m_Number.GetSigned())
+ : pdfium::MakeUnique<CPDF_Number>(param.m_Number.GetFloat());
return param.m_pObject.get();
}
if (param.m_Type == ContentParam::NAME) {
@@ -411,21 +411,20 @@ ByteString CPDF_StreamContentParser::GetString(uint32_t index) const {
}
float CPDF_StreamContentParser::GetNumber(uint32_t index) const {
- if (index >= m_ParamCount) {
+ if (index >= m_ParamCount)
return 0;
- }
+
int real_index = m_ParamStartPos + m_ParamCount - index - 1;
- if (real_index >= kParamBufSize) {
+ if (real_index >= kParamBufSize)
real_index -= kParamBufSize;
- }
+
const ContentParam& param = m_ParamBuf[real_index];
- if (param.m_Type == ContentParam::NUMBER) {
- return param.m_Number.m_bInteger
- ? static_cast<float>(param.m_Number.m_Integer)
- : param.m_Number.m_Float;
- }
+ if (param.m_Type == ContentParam::NUMBER)
+ return param.m_Number.GetFloat();
+
if (param.m_Type == 0 && param.m_pObject)
return param.m_pObject->GetNumber();
+
return 0;
}
@@ -1632,10 +1631,8 @@ void CPDF_StreamContentParser::ParsePathObject() {
if (nParams == 6)
break;
- int value;
- bool bInteger = FX_atonum(m_pSyntax->GetWord(), &value);
- params[nParams++] = bInteger ? static_cast<float>(value)
- : *reinterpret_cast<float*>(&value);
+ FX_Number number(m_pSyntax->GetWord());
+ params[nParams++] = number.GetFloat();
break;
}
default:
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.h b/core/fpdfapi/page/cpdf_streamcontentparser.h
index a129894dba..6417043305 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.h
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.h
@@ -15,6 +15,7 @@
#include "core/fpdfapi/page/cpdf_contentmark.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
+#include "core/fxcrt/fx_number.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxge/cfx_pathdata.h"
@@ -71,13 +72,7 @@ class CPDF_StreamContentParser {
Type m_Type;
std::unique_ptr<CPDF_Object> m_pObject;
- struct {
- bool m_bInteger;
- union {
- int m_Integer;
- float m_Float;
- };
- } m_Number;
+ FX_Number m_Number;
struct {
int m_Len;
char m_Buffer[32];