diff --git a/src/r_textures.c b/src/r_textures.c
index 8ff85de43e9fbcb6fb4b67e2bb32d4778ae4d65e..7e3d8445d44a9b0240b6c9451c79604b5ee05422 100644
--- a/src/r_textures.c
+++ b/src/r_textures.c
@@ -410,10 +410,18 @@ UINT8 *R_GenerateTexture(size_t texnum)
 		x2 = x1 + width;
 
 		if (x1 > texture->width || x2 < 0)
+		{
+			if (dealloc)
+				Z_Free(realpatch);
 			continue; // patch not located within texture's x bounds, ignore
+		}
 
 		if (patch->originy > texture->height || (patch->originy + height) < 0)
+		{
+			if (dealloc)
+				Z_Free(realpatch);
 			continue; // patch not located within texture's y bounds, ignore
+		}
 
 		// patch is actually inside the texture!
 		// now check if texture is partly off-screen and adjust accordingly