diff --git a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
index 8042f1b2e98d535aaa5f2c8d19a38c658db6cdd4..ce8cbe87cfb9d2ef2a1c04e7ccca808c48563dac 100644
--- a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
+++ b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
@@ -350,7 +350,7 @@ namespace vkcv::asset {
 								Scene &scene, Mesh &mesh) {
 		mesh.vertexGroups.reserve(objectMesh.primitives.size());
 	
-		for (const auto & objectPrimitive : objectMesh.primitives) {
+		for (const auto &objectPrimitive : objectMesh.primitives) {
 			VertexGroup vertexGroup;
 			
 			vertexGroup.vertexBuffer.attributes.reserve(
@@ -397,7 +397,7 @@ namespace vkcv::asset {
 				const fx::gltf::Buffer& indexBuffer = sceneObjects.buffers[indexBufferView.buffer];
 				
 				// Because the buffers are already preloaded into the memory by the gltf-library,
-				// it makes no sense to later them later on manually again into memory.
+				// it makes no sense to load them later on manually again into memory.
 				vertexGroup.indexBuffer.data.resize(indexBufferView.byteLength);
 				memcpy(vertexGroup.indexBuffer.data.data(),
 					   indexBuffer.data.data() + indexBufferView.byteOffset,
@@ -413,7 +413,17 @@ namespace vkcv::asset {
 				return ASSET_ERROR;
 			}
 	
+			if (posAccessor.bufferView >= sceneObjects.bufferViews.size()) {
+				vkcv_log(LogLevel::ERROR, "Access to bufferView out of bounds: %lu",
+						posAccessor.bufferView);
+				return ASSET_ERROR;
+			}
 			const fx::gltf::BufferView& vertexBufferView = sceneObjects.bufferViews[posAccessor.bufferView];
+			if (vertexBufferView.buffer >= sceneObjects.buffers.size()) {
+				vkcv_log(LogLevel::ERROR, "Access to buffer out of bounds: %lu",
+						vertexBufferView.buffer);
+				return ASSET_ERROR;
+			}
 			const fx::gltf::Buffer& vertexBuffer = sceneObjects.buffers[vertexBufferView.buffer];
 			
 			// only copy relevant part of vertex data