Avoid Assert in BKE_mesh_calc_loop_tangent_ex

Code could call CustomData_get_layer_index_n with a negative index (if
no active and/or render UV layers are found). This would assert since
rBe86785c51445.

Spotted while looking into T81398.

Differential Revision: https://developer.blender.org/D9212
This commit is contained in:
Philipp Oeser 2020-10-14 16:16:37 +02:00
parent 9c7fda6de3
commit e1cd6fae34
Notes: blender-bot 2023-10-04 09:42:55 +02:00
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
Referenced by issue #81398, Blender 2.90.1 crashes on switching to viewport rendered view
1 changed files with 6 additions and 2 deletions

View File

@ -724,7 +724,9 @@ void BKE_mesh_calc_loop_tangent_ex(const MVert *mvert,
*tangent_mask_curr_p = tangent_mask_curr;
/* Update active layer index */
int act_uv_index = CustomData_get_layer_index_n(loopdata, CD_MLOOPUV, act_uv_n);
int act_uv_index = (act_uv_n != -1) ?
CustomData_get_layer_index_n(loopdata, CD_MLOOPUV, act_uv_n) :
-1;
if (act_uv_index != -1) {
int tan_index = CustomData_get_named_layer_index(
loopdata, CD_TANGENT, loopdata->layers[act_uv_index].name);
@ -732,7 +734,9 @@ void BKE_mesh_calc_loop_tangent_ex(const MVert *mvert,
} /* else tangent has been built from orco */
/* Update render layer index */
int ren_uv_index = CustomData_get_layer_index_n(loopdata, CD_MLOOPUV, ren_uv_n);
int ren_uv_index = (ren_uv_n != -1) ?
CustomData_get_layer_index_n(loopdata, CD_MLOOPUV, ren_uv_n) :
-1;
if (ren_uv_index != -1) {
int tan_index = CustomData_get_named_layer_index(
loopdata, CD_TANGENT, loopdata->layers[ren_uv_index].name);