commit | 087188fab4fb3a771835d587ebf40a801ab9eacf | [log] [tgz] |
---|---|---|
author | David Benjamin <davidben@google.com> | Mon May 20 19:14:32 2024 -0400 |
committer | David Benjamin <davidben@google.com> | Mon May 20 19:18:30 2024 -0400 |
tree | cb28343412eaf8f2d523b7a70d29a9466dee1965 | |
parent | 3ce5202ceef95d02a826c13c516a8485ef26237a [diff] |
Use std::equal instead of memcmp in file_buffer_unittest.cc memcmp is impacted by a C language bug where it doesn't support empty slices with null pointers. See https://davidben.net/2024/01/15/empty-slices.html for details. This is the cause of a UBSan regression in Chromium: https://ci.chromium.org/ui/labs/p/chromium/inv/build-8747392691953287169/test/ninja%3A%2F%2Fthird_party%2Fperfetto%3Aperfetto_unittests%2FFileBuffer.ContiguousAccessAtOffset/variant/1ca38ed05f7bcb2c?resultIndex=0 Instead, use std::equal, which is not impacted by this C bug. begin() and end() would be better, but TraceBlobView doesn't seem to have begin() and end() methods. Instead I've used data() and data() + size(). std::ranges::equal would be even better, but that would require C++20, and I don't see other uses of std::ranges, so I'm guessing perfetto doesn't yet assume a C++20 STL. Bug: chromium:40248746 Change-Id: Ib4b7e90798ac822a179d64262965e61da498349c
Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.
See https://perfetto.dev/docs or the /docs/ directory for documentation.