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()) {