Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Unified Diff: xfa/src/fxfa/src/fm2js/xfa_lexer.h

Issue 1701363003: Fix some issues with CXFA_FMParse/CXFA_FMLexer infinite looping. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: address nits Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp ('k') | xfa/src/fxfa/src/fm2js/xfa_lexer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: xfa/src/fxfa/src/fm2js/xfa_lexer.h
diff --git a/xfa/src/fxfa/src/fm2js/xfa_lexer.h b/xfa/src/fxfa/src/fm2js/xfa_lexer.h
index 85b647e46ccf13e06f76e9733f6e1cafaa08486b..14b927d6d93b199eacd1a405091d612d92daa876 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_lexer.h
+++ b/xfa/src/fxfa/src/fm2js/xfa_lexer.h
@@ -6,6 +6,9 @@
#ifndef _XFA_FM_LEXER_H
#define _XFA_FM_LEXER_H
+
+#include <memory>
+
enum XFA_FM_TOKEN {
TOKand,
TOKlparen,
@@ -76,26 +79,28 @@ enum XFA_FM_TOKEN {
TOKnumber,
TOKreserver
};
+
struct XFA_FMKeyword {
XFA_FM_TOKEN m_type;
uint32_t m_uHash;
const FX_WCHAR* m_keword;
};
+
const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op);
+
class CXFA_FMToken {
public:
CXFA_FMToken();
- CXFA_FMToken(FX_DWORD uLineNum);
- ~CXFA_FMToken();
+ explicit CXFA_FMToken(FX_DWORD uLineNum);
+
CFX_WideStringC m_wstring;
XFA_FM_TOKEN m_type;
FX_DWORD m_uLinenum;
- CXFA_FMToken* m_pNext;
};
+
class CXFA_FMLexer {
public:
CXFA_FMLexer(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo);
- ~CXFA_FMLexer();
CXFA_FMToken* NextToken();
FX_DWORD Number(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd);
FX_DWORD String(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd);
@@ -106,10 +111,8 @@ class CXFA_FMLexer {
XFA_FM_TOKEN IsKeyword(const CFX_WideStringC& p);
void SetCurrentLine(FX_DWORD line) { m_uCurrentLine = line; }
void SetToken(CXFA_FMToken* pToken) {
- if (m_pToken) {
- delete m_pToken;
- }
- m_pToken = pToken;
+ if (m_pToken.get() != pToken)
+ m_pToken.reset(pToken);
}
const FX_WCHAR* SavePos() { return m_ptr; }
void RestorePos(const FX_WCHAR* pPos) { m_ptr = pPos; }
@@ -118,11 +121,11 @@ class CXFA_FMLexer {
protected:
CXFA_FMToken* Scan();
- const FX_WCHAR* m_pScript;
+
const FX_WCHAR* m_ptr;
- FX_STRSIZE m_uLength;
FX_DWORD m_uCurrentLine;
- CXFA_FMToken* m_pToken;
+ std::unique_ptr<CXFA_FMToken> m_pToken;
CXFA_FMErrorInfo* m_pErrorInfo;
};
+
#endif
« no previous file with comments | « xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp ('k') | xfa/src/fxfa/src/fm2js/xfa_lexer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698