From ca26c89fa4ccb36401a29bb8ce0d2c0eff32ed71 Mon Sep 17 00:00:00 2001 From: Alexander Zapryagaev Date: Sat, 19 Oct 2024 16:39:15 -0700 Subject: [PATCH] Unknown (undefined) features cause undefined to i32 array writes --- src/library_webgpu.js | 44 +++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/library_webgpu.js b/src/library_webgpu.js index f6d7bfa45928a..a2a104ce6c405 100644 --- a/src/library_webgpu.js +++ b/src/library_webgpu.js @@ -822,16 +822,20 @@ var LibraryWebGPU = { // wgpuDevice wgpuDeviceEnumerateFeatures: (deviceId, featuresOutPtr) => { + var offset = 0; + var numFeatures = 0; var device = WebGPU.mgrDevice.get(deviceId); - if (featuresOutPtr !== 0) { - var offset = 0; - device.features.forEach(feature => { - var featureEnumValue = WebGPU.FeatureNameString2Enum[feature]; - {{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}}; - offset += 4; - }); - } - return device.features.size; + device.features.forEach(feature => { + var featureEnumValue = WebGPU.FeatureNameString2Enum[feature]; + if (featureEnumValue !== undefined) { + if (featuresOutPtr !== 0) { + {{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}}; + offset += 4; + } + numFeatures++; + } + }); + return numFeatures; }, wgpuDeviceDestroy: (deviceId) => WebGPU.mgrDevice.get(deviceId).destroy(), @@ -2568,16 +2572,20 @@ var LibraryWebGPU = { // WGPUAdapter wgpuAdapterEnumerateFeatures: (adapterId, featuresOutPtr) => { + var offset = 0; + var numFeatures = 0; var adapter = WebGPU.mgrAdapter.get(adapterId); - if (featuresOutPtr !== 0) { - var offset = 0; - adapter.features.forEach(feature => { - var featureEnumValue = WebGPU.FeatureNameString2Enum[feature]; - {{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}}; - offset += 4; - }); - } - return adapter.features.size; + adapter.features.forEach(feature => { + var featureEnumValue = WebGPU.FeatureNameString2Enum[feature]; + if (featureEnumValue !== undefined) { + if (featuresOutPtr !== 0) { + {{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}}; + offset += 4; + } + numFeatures++; + } + }); + return numFeatures; }, wgpuAdapterGetInfo__deps: ['$stringToNewUTF8'],