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

Side by Side Diff: xfa/fde/css/fde_csssyntax.cpp

Issue 2031873003: Get rid of NULLs in xfa/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@nullptr_fpdfsdk
Patch Set: Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « xfa/fde/css/fde_cssstylesheet.cpp ('k') | xfa/fde/fde_gedevice.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fde/css/fde_csssyntax.h" 7 #include "xfa/fde/css/fde_csssyntax.h"
8 8
9 #include "xfa/fde/css/fde_cssdatatable.h" 9 #include "xfa/fde/css/fde_cssdatatable.h"
10 #include "xfa/fgas/crt/fgas_codepage.h" 10 #include "xfa/fgas/crt/fgas_codepage.h"
11 11
12 #ifdef _cplusplus 12 #ifdef _cplusplus
13 extern "C" { 13 extern "C" {
14 #endif 14 #endif
15 15
16 inline FX_BOOL FDE_IsSelectorStart(FX_WCHAR wch) { 16 FX_BOOL FDE_IsSelectorStart(FX_WCHAR wch) {
17 return wch == '.' || wch == '#' || wch == '*' || (wch >= 'a' && wch <= 'z') || 17 return wch == '.' || wch == '#' || wch == '*' || (wch >= 'a' && wch <= 'z') ||
18 (wch >= 'A' && wch <= 'Z'); 18 (wch >= 'A' && wch <= 'Z');
19 } 19 }
20 20
21 #ifdef _cplusplus 21 #ifdef _cplusplus
22 }; 22 };
23 #endif 23 #endif
24 24
25 CFDE_CSSSyntaxParser::CFDE_CSSSyntaxParser() 25 CFDE_CSSSyntaxParser::CFDE_CSSSyntaxParser()
26 : m_pStream(NULL), 26 : m_pStream(nullptr),
27 m_iStreamPos(0), 27 m_iStreamPos(0),
28 m_iPlaneSize(0), 28 m_iPlaneSize(0),
29 m_iTextDatLen(0), 29 m_iTextDatLen(0),
30 m_dwCheck((uint32_t)-1), 30 m_dwCheck((uint32_t)-1),
31 m_eMode(FDE_CSSSYNTAXMODE_RuleSet), 31 m_eMode(FDE_CSSSYNTAXMODE_RuleSet),
32 m_eStatus(FDE_CSSSYNTAXSTATUS_None) {} 32 m_eStatus(FDE_CSSSYNTAXSTATUS_None) {}
33 CFDE_CSSSyntaxParser::~CFDE_CSSSyntaxParser() { 33 CFDE_CSSSyntaxParser::~CFDE_CSSSyntaxParser() {
34 m_TextData.Reset(); 34 m_TextData.Reset();
35 m_TextPlane.Reset(); 35 m_TextPlane.Reset();
36 } 36 }
37 FX_BOOL CFDE_CSSSyntaxParser::Init(IFX_Stream* pStream, 37 FX_BOOL CFDE_CSSSyntaxParser::Init(IFX_Stream* pStream,
38 int32_t iCSSPlaneSize, 38 int32_t iCSSPlaneSize,
39 int32_t iTextDataSize, 39 int32_t iTextDataSize,
40 FX_BOOL bOnlyDeclaration) { 40 FX_BOOL bOnlyDeclaration) {
41 ASSERT(pStream != NULL && iCSSPlaneSize > 0 && iTextDataSize > 0); 41 ASSERT(pStream && iCSSPlaneSize > 0 && iTextDataSize > 0);
42 Reset(bOnlyDeclaration); 42 Reset(bOnlyDeclaration);
43 if (!m_TextData.EstimateSize(iTextDataSize)) { 43 if (!m_TextData.EstimateSize(iTextDataSize)) {
44 return FALSE; 44 return FALSE;
45 } 45 }
46 uint8_t bom[4]; 46 uint8_t bom[4];
47 m_pStream = pStream; 47 m_pStream = pStream;
48 m_iStreamPos = m_pStream->GetBOM(bom); 48 m_iStreamPos = m_pStream->GetBOM(bom);
49 m_iPlaneSize = iCSSPlaneSize; 49 m_iPlaneSize = iCSSPlaneSize;
50 return TRUE; 50 return TRUE;
51 } 51 }
52 FX_BOOL CFDE_CSSSyntaxParser::Init(const FX_WCHAR* pBuffer, 52 FX_BOOL CFDE_CSSSyntaxParser::Init(const FX_WCHAR* pBuffer,
53 int32_t iBufferSize, 53 int32_t iBufferSize,
54 int32_t iTextDatSize, 54 int32_t iTextDatSize,
55 FX_BOOL bOnlyDeclaration) { 55 FX_BOOL bOnlyDeclaration) {
56 ASSERT(pBuffer != NULL && iBufferSize > 0 && iTextDatSize > 0); 56 ASSERT(pBuffer && iBufferSize > 0 && iTextDatSize > 0);
57 Reset(bOnlyDeclaration); 57 Reset(bOnlyDeclaration);
58 if (!m_TextData.EstimateSize(iTextDatSize)) { 58 if (!m_TextData.EstimateSize(iTextDatSize)) {
59 return FALSE; 59 return FALSE;
60 } 60 }
61 return m_TextPlane.AttachBuffer(pBuffer, iBufferSize); 61 return m_TextPlane.AttachBuffer(pBuffer, iBufferSize);
62 } 62 }
63 void CFDE_CSSSyntaxParser::Reset(FX_BOOL bOnlyDeclaration) { 63 void CFDE_CSSSyntaxParser::Reset(FX_BOOL bOnlyDeclaration) {
64 m_TextPlane.Reset(); 64 m_TextPlane.Reset();
65 m_TextData.Reset(); 65 m_TextData.Reset();
66 m_pStream = NULL; 66 m_pStream = nullptr;
67 m_iStreamPos = 0; 67 m_iStreamPos = 0;
68 m_iTextDatLen = 0; 68 m_iTextDatLen = 0;
69 m_dwCheck = (uint32_t)-1; 69 m_dwCheck = (uint32_t)-1;
70 m_eStatus = FDE_CSSSYNTAXSTATUS_None; 70 m_eStatus = FDE_CSSSYNTAXSTATUS_None;
71 m_eMode = bOnlyDeclaration ? FDE_CSSSYNTAXMODE_PropertyName 71 m_eMode = bOnlyDeclaration ? FDE_CSSSYNTAXMODE_PropertyName
72 : FDE_CSSSYNTAXMODE_RuleSet; 72 : FDE_CSSSYNTAXMODE_RuleSet;
73 } 73 }
74 FDE_CSSSYNTAXSTATUS CFDE_CSSSyntaxParser::DoSyntaxParse() { 74 FDE_CSSSYNTAXSTATUS CFDE_CSSSyntaxParser::DoSyntaxParse() {
75 while (m_eStatus >= FDE_CSSSYNTAXSTATUS_None) { 75 while (m_eStatus >= FDE_CSSSYNTAXSTATUS_None) {
76 if (m_TextPlane.IsEOF()) { 76 if (m_TextPlane.IsEOF()) {
77 if (m_pStream == NULL) { 77 if (!m_pStream) {
78 if (m_eMode == FDE_CSSSYNTAXMODE_PropertyValue && 78 if (m_eMode == FDE_CSSSYNTAXMODE_PropertyValue &&
79 m_TextData.GetLength() > 0) { 79 m_TextData.GetLength() > 0) {
80 SaveTextData(); 80 SaveTextData();
81 return m_eStatus = FDE_CSSSYNTAXSTATUS_PropertyValue; 81 return m_eStatus = FDE_CSSSYNTAXSTATUS_PropertyValue;
82 } 82 }
83 return m_eStatus = FDE_CSSSYNTAXSTATUS_EOS; 83 return m_eStatus = FDE_CSSSYNTAXSTATUS_EOS;
84 } 84 }
85 FX_BOOL bEOS; 85 FX_BOOL bEOS;
86 int32_t iLen = m_TextPlane.LoadFromStream(m_pStream, m_iStreamPos, 86 int32_t iLen = m_TextPlane.LoadFromStream(m_pStream, m_iStreamPos,
87 m_iPlaneSize, bEOS); 87 m_iPlaneSize, bEOS);
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 switch (wch) { 221 switch (wch) {
222 case ',': 222 case ',':
223 m_TextPlane.MoveNext(); 223 m_TextPlane.MoveNext();
224 SwitchMode(FDE_CSSSYNTAXMODE_MediaType); 224 SwitchMode(FDE_CSSSYNTAXMODE_MediaType);
225 if (m_iTextDatLen > 0) { 225 if (m_iTextDatLen > 0) {
226 return FDE_CSSSYNTAXSTATUS_MediaType; 226 return FDE_CSSSYNTAXSTATUS_MediaType;
227 } 227 }
228 break; 228 break;
229 case '{': { 229 case '{': {
230 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); 230 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement();
231 if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_MediaRule) { 231 if (!pMode || *pMode != FDE_CSSSYNTAXMODE_MediaRule)
232 return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; 232 return m_eStatus = FDE_CSSSYNTAXSTATUS_Error;
233 } 233
234 if (m_TextData.GetLength() > 0) { 234 if (m_TextData.GetLength() > 0) {
235 SaveTextData(); 235 SaveTextData();
236 return FDE_CSSSYNTAXSTATUS_MediaType; 236 return FDE_CSSSYNTAXSTATUS_MediaType;
237 } else { 237 } else {
238 m_TextPlane.MoveNext(); 238 m_TextPlane.MoveNext();
239 *pMode = FDE_CSSSYNTAXMODE_RuleSet; 239 *pMode = FDE_CSSSYNTAXMODE_RuleSet;
240 SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); 240 SwitchMode(FDE_CSSSYNTAXMODE_RuleSet);
241 return FDE_CSSSYNTAXSTATUS_DeclOpen; 241 return FDE_CSSSYNTAXSTATUS_DeclOpen;
242 } 242 }
243 } break; 243 } break;
244 case ';': { 244 case ';': {
245 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); 245 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement();
246 if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_Import) { 246 if (!pMode || *pMode != FDE_CSSSYNTAXMODE_Import)
247 return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; 247 return m_eStatus = FDE_CSSSYNTAXSTATUS_Error;
248 } 248
249 if (m_TextData.GetLength() > 0) { 249 if (m_TextData.GetLength() > 0) {
250 SaveTextData(); 250 SaveTextData();
251 if (IsImportEnabled()) { 251 if (IsImportEnabled()) {
252 return FDE_CSSSYNTAXSTATUS_MediaType; 252 return FDE_CSSSYNTAXSTATUS_MediaType;
253 } 253 }
254 } else { 254 } else {
255 FX_BOOL bEnabled = IsImportEnabled(); 255 FX_BOOL bEnabled = IsImportEnabled();
256 m_TextPlane.MoveNext(); 256 m_TextPlane.MoveNext();
257 m_ModeStack.Pop(); 257 m_ModeStack.Pop();
258 SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); 258 SwitchMode(FDE_CSSSYNTAXMODE_RuleSet);
(...skipping 10 matching lines...) Expand all
269 } 269 }
270 break; 270 break;
271 } 271 }
272 default: 272 default:
273 AppendChar(wch); 273 AppendChar(wch);
274 break; 274 break;
275 } 275 }
276 break; 276 break;
277 case FDE_CSSSYNTAXMODE_URI: { 277 case FDE_CSSSYNTAXMODE_URI: {
278 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); 278 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement();
279 if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_Import) { 279 if (!pMode || *pMode != FDE_CSSSYNTAXMODE_Import)
280 return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; 280 return m_eStatus = FDE_CSSSYNTAXSTATUS_Error;
281 } 281
282 if (wch <= ' ' || wch == ';') { 282 if (wch <= ' ' || wch == ';') {
283 int32_t iURIStart, iURILength = m_TextData.GetLength(); 283 int32_t iURIStart, iURILength = m_TextData.GetLength();
284 if (iURILength > 0 && 284 if (iURILength > 0 &&
285 FDE_ParseCSSURI(m_TextData.GetBuffer(), iURILength, iURIStart, 285 FDE_ParseCSSURI(m_TextData.GetBuffer(), iURILength, iURIStart,
286 iURILength)) { 286 iURILength)) {
287 m_TextData.Subtract(iURIStart, iURILength); 287 m_TextData.Subtract(iURIStart, iURILength);
288 SwitchMode(FDE_CSSSYNTAXMODE_MediaType); 288 SwitchMode(FDE_CSSSYNTAXMODE_MediaType);
289 if (IsImportEnabled()) { 289 if (IsImportEnabled()) {
290 return FDE_CSSSYNTAXSTATUS_URI; 290 return FDE_CSSSYNTAXSTATUS_URI;
291 } else { 291 } else {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 } 326 }
327 } 327 }
328 break; 328 break;
329 case FDE_CSSSYNTAXMODE_Charset: 329 case FDE_CSSSYNTAXMODE_Charset:
330 if (wch == ';') { 330 if (wch == ';') {
331 m_TextPlane.MoveNext(); 331 m_TextPlane.MoveNext();
332 SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); 332 SwitchMode(FDE_CSSSYNTAXMODE_RuleSet);
333 if (IsCharsetEnabled()) { 333 if (IsCharsetEnabled()) {
334 DisableCharset(); 334 DisableCharset();
335 if (m_iTextDatLen > 0) { 335 if (m_iTextDatLen > 0) {
336 if (m_pStream != NULL) { 336 if (m_pStream) {
337 uint16_t wCodePage = FX_GetCodePageFromStringW( 337 uint16_t wCodePage = FX_GetCodePageFromStringW(
338 m_TextData.GetBuffer(), m_iTextDatLen); 338 m_TextData.GetBuffer(), m_iTextDatLen);
339 if (wCodePage < 0xFFFF && 339 if (wCodePage < 0xFFFF &&
340 m_pStream->GetCodePage() != wCodePage) { 340 m_pStream->GetCodePage() != wCodePage) {
341 m_pStream->SetCodePage(wCodePage); 341 m_pStream->SetCodePage(wCodePage);
342 } 342 }
343 } 343 }
344 return FDE_CSSSYNTAXSTATUS_Charset; 344 return FDE_CSSSYNTAXSTATUS_Charset;
345 } 345 }
346 } 346 }
(...skipping 17 matching lines...) Expand all
364 } 364 }
365 FX_BOOL CFDE_CSSSyntaxParser::IsImportEnabled() const { 365 FX_BOOL CFDE_CSSSyntaxParser::IsImportEnabled() const {
366 if ((m_dwCheck & FDE_CSSSYNTAXCHECK_AllowImport) == 0) { 366 if ((m_dwCheck & FDE_CSSSYNTAXCHECK_AllowImport) == 0) {
367 return FALSE; 367 return FALSE;
368 } 368 }
369 if (m_ModeStack.GetSize() > 1) { 369 if (m_ModeStack.GetSize() > 1) {
370 return FALSE; 370 return FALSE;
371 } 371 }
372 return TRUE; 372 return TRUE;
373 } 373 }
374 inline FX_BOOL CFDE_CSSSyntaxParser::AppendChar(FX_WCHAR wch) { 374 FX_BOOL CFDE_CSSSyntaxParser::AppendChar(FX_WCHAR wch) {
375 m_TextPlane.MoveNext(); 375 m_TextPlane.MoveNext();
376 if (m_TextData.GetLength() > 0 || wch > ' ') { 376 if (m_TextData.GetLength() > 0 || wch > ' ') {
377 m_TextData.AppendChar(wch); 377 m_TextData.AppendChar(wch);
378 return TRUE; 378 return TRUE;
379 } 379 }
380 return FALSE; 380 return FALSE;
381 } 381 }
382 inline int32_t CFDE_CSSSyntaxParser::SaveTextData() { 382 int32_t CFDE_CSSSyntaxParser::SaveTextData() {
383 m_iTextDatLen = m_TextData.TrimEnd(); 383 m_iTextDatLen = m_TextData.TrimEnd();
384 m_TextData.Clear(); 384 m_TextData.Clear();
385 return m_iTextDatLen; 385 return m_iTextDatLen;
386 } 386 }
387 inline void CFDE_CSSSyntaxParser::SwitchMode(FDE_CSSSYNTAXMODE eMode) { 387 void CFDE_CSSSyntaxParser::SwitchMode(FDE_CSSSYNTAXMODE eMode) {
388 m_eMode = eMode; 388 m_eMode = eMode;
389 SaveTextData(); 389 SaveTextData();
390 } 390 }
391 inline int32_t CFDE_CSSSyntaxParser::SwitchToComment() { 391 int32_t CFDE_CSSSyntaxParser::SwitchToComment() {
392 int32_t iLength = m_TextData.GetLength(); 392 int32_t iLength = m_TextData.GetLength();
393 m_ModeStack.Push(m_eMode); 393 m_ModeStack.Push(m_eMode);
394 SwitchMode(FDE_CSSSYNTAXMODE_Comment); 394 SwitchMode(FDE_CSSSYNTAXMODE_Comment);
395 return iLength; 395 return iLength;
396 } 396 }
397 inline FX_BOOL CFDE_CSSSyntaxParser::RestoreMode() { 397 FX_BOOL CFDE_CSSSyntaxParser::RestoreMode() {
398 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); 398 FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement();
399 if (pMode == NULL) { 399 if (!pMode)
400 return FALSE; 400 return FALSE;
401 } 401
402 SwitchMode(*pMode); 402 SwitchMode(*pMode);
403 m_ModeStack.Pop(); 403 m_ModeStack.Pop();
404 return TRUE; 404 return TRUE;
405 } 405 }
406 const FX_WCHAR* CFDE_CSSSyntaxParser::GetCurrentString(int32_t& iLength) const { 406 const FX_WCHAR* CFDE_CSSSyntaxParser::GetCurrentString(int32_t& iLength) const {
407 iLength = m_iTextDatLen; 407 iLength = m_iTextDatLen;
408 return m_TextData.GetBuffer(); 408 return m_TextData.GetBuffer();
409 } 409 }
410 CFDE_CSSTextBuf::CFDE_CSSTextBuf() 410 CFDE_CSSTextBuf::CFDE_CSSTextBuf()
411 : m_bExtBuf(FALSE), 411 : m_bExtBuf(FALSE),
412 m_pBuffer(NULL), 412 m_pBuffer(nullptr),
413 m_iBufLen(0), 413 m_iBufLen(0),
414 m_iDatLen(0), 414 m_iDatLen(0),
415 m_iDatPos(0) {} 415 m_iDatPos(0) {}
416 CFDE_CSSTextBuf::~CFDE_CSSTextBuf() { 416 CFDE_CSSTextBuf::~CFDE_CSSTextBuf() {
417 Reset(); 417 Reset();
418 } 418 }
419 void CFDE_CSSTextBuf::Reset() { 419 void CFDE_CSSTextBuf::Reset() {
420 if (!m_bExtBuf) { 420 if (!m_bExtBuf) {
421 FX_Free(m_pBuffer); 421 FX_Free(m_pBuffer);
422 m_pBuffer = NULL; 422 m_pBuffer = nullptr;
423 } 423 }
424 m_iDatPos = m_iDatLen = m_iBufLen; 424 m_iDatPos = m_iDatLen = m_iBufLen;
425 } 425 }
426 FX_BOOL CFDE_CSSTextBuf::AttachBuffer(const FX_WCHAR* pBuffer, 426 FX_BOOL CFDE_CSSTextBuf::AttachBuffer(const FX_WCHAR* pBuffer,
427 int32_t iBufLen) { 427 int32_t iBufLen) {
428 Reset(); 428 Reset();
429 m_pBuffer = const_cast<FX_WCHAR*>(pBuffer); 429 m_pBuffer = const_cast<FX_WCHAR*>(pBuffer);
430 m_iDatLen = m_iBufLen = iBufLen; 430 m_iDatLen = m_iBufLen = iBufLen;
431 return m_bExtBuf = TRUE; 431 return m_bExtBuf = TRUE;
432 } 432 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 if (iLength > m_iDatLen - iStart) { 475 if (iLength > m_iDatLen - iStart) {
476 iLength = m_iDatLen - iStart; 476 iLength = m_iDatLen - iStart;
477 } 477 }
478 if (iLength < 0) { 478 if (iLength < 0) {
479 iLength = 0; 479 iLength = 0;
480 } else { 480 } else {
481 FXSYS_memmove(m_pBuffer, m_pBuffer + iStart, iLength * sizeof(FX_WCHAR)); 481 FXSYS_memmove(m_pBuffer, m_pBuffer + iStart, iLength * sizeof(FX_WCHAR));
482 } 482 }
483 m_iDatLen = iLength; 483 m_iDatLen = iLength;
484 } 484 }
OLDNEW
« no previous file with comments | « xfa/fde/css/fde_cssstylesheet.cpp ('k') | xfa/fde/fde_gedevice.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698