Skip to content

Commit 9e618aa

Browse files
TellusimAlexander Zapryagaev
andauthored
[webgpu] Unknown (undefined) features cause undefined to i32 array writes (#22771)
Co-authored-by: Alexander Zapryagaev <[email protected]>
1 parent 75caed4 commit 9e618aa

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

src/library_webgpu.js

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -822,16 +822,20 @@ var LibraryWebGPU = {
822822
// wgpuDevice
823823

824824
wgpuDeviceEnumerateFeatures: (deviceId, featuresOutPtr) => {
825+
var offset = 0;
826+
var numFeatures = 0;
825827
var device = WebGPU.mgrDevice.get(deviceId);
826-
if (featuresOutPtr !== 0) {
827-
var offset = 0;
828-
device.features.forEach(feature => {
829-
var featureEnumValue = WebGPU.FeatureNameString2Enum[feature];
830-
{{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}};
831-
offset += 4;
832-
});
833-
}
834-
return device.features.size;
828+
device.features.forEach(feature => {
829+
var featureEnumValue = WebGPU.FeatureNameString2Enum[feature];
830+
if (featureEnumValue !== undefined) {
831+
if (featuresOutPtr !== 0) {
832+
{{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}};
833+
offset += 4;
834+
}
835+
numFeatures++;
836+
}
837+
});
838+
return numFeatures;
835839
},
836840

837841
wgpuDeviceDestroy: (deviceId) => WebGPU.mgrDevice.get(deviceId).destroy(),
@@ -2568,16 +2572,20 @@ var LibraryWebGPU = {
25682572
// WGPUAdapter
25692573

25702574
wgpuAdapterEnumerateFeatures: (adapterId, featuresOutPtr) => {
2575+
var offset = 0;
2576+
var numFeatures = 0;
25712577
var adapter = WebGPU.mgrAdapter.get(adapterId);
2572-
if (featuresOutPtr !== 0) {
2573-
var offset = 0;
2574-
adapter.features.forEach(feature => {
2575-
var featureEnumValue = WebGPU.FeatureNameString2Enum[feature];
2576-
{{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}};
2577-
offset += 4;
2578-
});
2579-
}
2580-
return adapter.features.size;
2578+
adapter.features.forEach(feature => {
2579+
var featureEnumValue = WebGPU.FeatureNameString2Enum[feature];
2580+
if (featureEnumValue !== undefined) {
2581+
if (featuresOutPtr !== 0) {
2582+
{{{ makeSetValue('featuresOutPtr', 'offset', 'featureEnumValue', 'i32') }}};
2583+
offset += 4;
2584+
}
2585+
numFeatures++;
2586+
}
2587+
});
2588+
return numFeatures;
25812589
},
25822590

25832591
wgpuAdapterGetInfo__deps: ['$stringToNewUTF8'],

0 commit comments

Comments
 (0)