浏览代码

sokol_app.h wgpu: add a bounds check to the wgpu feature detection code

Andre Weissflog 1 年之前
父节点
当前提交
13554f665e
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      sokol_app.h

+ 7 - 1
sokol_app.h

@@ -5765,22 +5765,28 @@ _SOKOL_PRIVATE void _sapp_emsc_wgpu_request_adapter_cb(WGPURequestAdapterStatus
     SOKOL_ASSERT(adapter);
     SOKOL_ASSERT(adapter);
     _sapp.wgpu.adapter = adapter;
     _sapp.wgpu.adapter = adapter;
     size_t cur_feature_index = 1;
     size_t cur_feature_index = 1;
-    WGPUFeatureName requiredFeatures[8] = {
+    #define _SAPP_WGPU_MAX_REQUESTED_FEATURES (8)
+    WGPUFeatureName requiredFeatures[_SAPP_WGPU_MAX_REQUESTED_FEATURES] = {
         WGPUFeatureName_Depth32FloatStencil8,
         WGPUFeatureName_Depth32FloatStencil8,
     };
     };
     // check for optional features we're interested in
     // check for optional features we're interested in
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionBC)) {
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionBC)) {
+        SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES);
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionBC;
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionBC;
     }
     }
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionETC2)) {
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionETC2)) {
+        SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES);
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionETC2;
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionETC2;
     }
     }
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionASTC)) {
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionASTC)) {
+        SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES);
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionASTC;
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionASTC;
     }
     }
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_Float32Filterable)) {
     if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_Float32Filterable)) {
+        SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES);
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_Float32Filterable;
         requiredFeatures[cur_feature_index++] = WGPUFeatureName_Float32Filterable;
     }
     }
+    #undef _SAPP_WGPU_MAX_REQUESTED_FEATURES
 
 
     WGPUDeviceDescriptor dev_desc;
     WGPUDeviceDescriptor dev_desc;
     _sapp_clear(&dev_desc, sizeof(dev_desc));
     _sapp_clear(&dev_desc, sizeof(dev_desc));