Fix CNullDriver::removeTexture() segfault

`Textures` is not an one-to-one mapping.
Minetest still crashes with this commit but that's because
it attempts to double-free a texture.
broken by 7298b46504
This commit is contained in:
sfan5 2023-09-13 14:40:39 +02:00
parent f9d7a632f5
commit 679dfd3343
1 changed files with 10 additions and 4 deletions

View File

@ -286,10 +286,16 @@ void CNullDriver::removeTexture(ITexture* texture)
SSurface s;
s.Surface = texture;
s32 index = Textures.binary_search(s);
if (index != -1) {
texture->drop();
Textures.erase(index);
s32 last;
s32 first = Textures.binary_search_multi(s, last);
if (first == -1)
return;
for (u32 i = first; i <= (u32)last; i++) {
if (Textures[i].Surface == texture) {
texture->drop();
Textures.erase(i);
return;
}
}
}