commit | 221ae88b5e952ea35312161caf2c33d66a2cfff7 | [log] [tgz] |
---|---|---|
author | David Benjamin <davidben@google.com> | Tue May 21 13:17:38 2024 +0000 |
committer | Dawn LUCI CQ <dawn-scoped@luci-project-accounts.iam.gserviceaccount.com> | Tue May 21 13:17:38 2024 +0000 |
tree | 272c35e2c2b6828e251bd4910407024736c4cf67 | |
parent | 209717796747895be7a1d0454e850aeebed94a8f [diff] |
Don't memcpy zero bytes in generated WireCmd.cpp Due to a C language bug, memcpy is undefined on empty inputs when the pointers are NULL. See https://davidben.net/2024/01/15/empty-slices.html for details. This code triggers UBSan bugs like the following: https://luci-milo.appspot.com/ui/inv/build-8749056521619502353/test-results?q=WebGPUSwapBufferProviderTest.ReuseSwapBuffers&sortby=&groupby= For most of these in Chromium, I've been fixing them to use spans, or at least std::copy and std::copy_n, which do not have this language bug and are specialized as memcpy when the type is trivially copyable. However, when I tried to do that, I ran into issues with WGPUColor and WGPUColorTransfer being different types. There's a lot of synthesized code here I can't follow so, instead, just guard the memcpy with a zero check to fix the undefined behavior. Bug: chromium:40248746 Change-Id: I4041bfb750a3e0fcf56353bffefc0a2715603475 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/188900 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org> Auto-Submit: David Benjamin <davidben@google.com>
Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h
that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.
Dawn provides several WebGPU building blocks:
webgpu.h
version that Dawn implements.webgpu.h
.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
BSD 3-Clause License, please see LICENSE.
This is not an officially supported Google product.