{"record":{"id":"f5cb2399fdb34360","repo":"gfx-rs/wgpu","slug":"buffer-range-invalid-for-gles","errorCode":null,"errorMessage":"Buffer range invalid for GLES","messagePattern":"Buffer range invalid for GLES","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"wgpu-hal/src/gles/device.rs","lineNumber":871,"sourceCode":"                slice.as_mut_ptr()\n            }\n            Some(raw) => {\n                let gl = &self.shared.context.lock();\n                unsafe { gl.bind_buffer(buffer.target, Some(raw)) };\n                let mut map_state = buffer.map_state.lock();\n                let ptr = if let Some(map_read_allocation) = map_state.data.as_mut() {\n                    let slice = map_read_allocation.as_mut_slice();\n                    unsafe { self.shared.get_buffer_sub_data(gl, buffer.target, 0, slice) };\n                    slice.as_mut_ptr()\n                } else {\n                    map_state.offset_of_current_mapping = range.start;\n                    // glMapBufferRange throws an error if length is 0.\n                    // We want to allow mapping 0-sized buffer slices, so perform a workaround\n                    // if the range length is 0. The resulting pointer must never be dereferenced.\n                    let range_start: i32 = range\n                        .start\n                        .try_into()\n                        .expect(\"Buffer range invalid for GLES\");\n                    let range_length: i32 = (range.end - range.start)\n                        .try_into()\n                        .expect(\"Buffer range invalid for GLES\");\n                    if range_length != 0 {\n                        map_state.mapped = true;\n                        unsafe {\n                            gl.map_buffer_range(\n                                buffer.target,\n                                range_start,\n                                range_length,\n                                buffer.map_flags,\n                            )\n                        }\n                    } else {\n                        ptr::dangling_mut()\n                    }\n                };\n                unsafe { gl.bind_buffer(buffer.target, None) };","sourceCodeStart":853,"sourceCodeEnd":889,"githubUrl":"https://github.com/gfx-rs/wgpu/blob/3e11ff59bf3f9795d285ecc045014089640d7248/wgpu-hal/src/gles/device.rs#L853-L889","documentation":"Panic in the GLES map_buffer: the requested mapping range is invalid under GL constraints (e.g. non-zero offset or size mismatch not representable by glMapBufferRange), so the mapping cannot proceed. The faulty input is the buffer range passed to map.","triggerScenarios":"Thrown at wgpu-hal/src/gles/device.rs:871 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Map the whole buffer on GLES (offset 0, full size) by allocating dedicated staging buffers","Avoid sub-range mapping with exotic offsets on the GL backend"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3e11ff59bf3f9795d285ecc045014089640d7248","analyzedAt":"2026-09-03T01:43:21.459Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T07:17:11.731Z"}