Use span arithmetic in cfx_xmlparser.cpp. We can make a span from a vector, and then get an (initial) bounds-checked pointer from it by applying subspan(). This avoids a clang-tidy pointer arithmetic warning. Change-Id: Ife9502ac0124467309c8027c4bfd163b9d11d26a Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52790 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp index cba956e..eea684a 100644 --- a/core/fxcrt/xml/cfx_xmlparser.cpp +++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -335,13 +335,13 @@ } current_buffer_idx++; break; - case FDE_XmlSyntaxState::SkipCommentOrDecl: - if (FXSYS_wcsnicmp(buffer.data() + current_buffer_idx, L"--", 2) == - 0) { + case FDE_XmlSyntaxState::SkipCommentOrDecl: { + auto current_span = + pdfium::make_span(buffer).subspan(current_buffer_idx); + if (FXSYS_wcsnicmp(current_span.data(), L"--", 2) == 0) { current_buffer_idx += 2; current_parser_state = FDE_XmlSyntaxState::SkipComment; - } else if (FXSYS_wcsnicmp(buffer.data() + current_buffer_idx, - L"[CDATA[", 7) == 0) { + } else if (FXSYS_wcsnicmp(current_span.data(), L"[CDATA[", 7) == 0) { current_buffer_idx += 7; current_parser_state = FDE_XmlSyntaxState::SkipCData; } else { @@ -350,12 +350,13 @@ character_to_skip_too_stack.push(L'>'); } break; + } case FDE_XmlSyntaxState::SkipCData: { - if (FXSYS_wcsnicmp(buffer.data() + current_buffer_idx, L"]]>", 3) == - 0) { + auto current_span = + pdfium::make_span(buffer).subspan(current_buffer_idx); + if (FXSYS_wcsnicmp(current_span.data(), L"]]>", 3) == 0) { current_buffer_idx += 3; current_parser_state = FDE_XmlSyntaxState::Text; - current_node_->AppendChild( doc->CreateNode<CFX_XMLCharData>(GetTextData())); } else { @@ -413,15 +414,16 @@ current_buffer_idx++; } break; - case FDE_XmlSyntaxState::SkipComment: - if (FXSYS_wcsnicmp(buffer.data() + current_buffer_idx, L"-->", 3) == - 0) { + case FDE_XmlSyntaxState::SkipComment: { + auto current_span = + pdfium::make_span(buffer).subspan(current_buffer_idx); + if (FXSYS_wcsnicmp(current_span.data(), L"-->", 3) == 0) { current_buffer_idx += 2; current_parser_state = FDE_XmlSyntaxState::Text; } - current_buffer_idx++; break; + } case FDE_XmlSyntaxState::TargetData: if (IsXMLWhiteSpace(ch)) { if (current_text_.empty()) {