Fix T84512: Crash if size input of Blur node is too large

Gaussian filter with a too large kernel doesn't make much sense.
This commit caps the Gaussian function radius to MAX_GAUSSTAB_RADIUS.

Reviewed By: sergey

Maniphest Tasks: T84512

Differential Revision: https://developer.blender.org/D10122
This commit is contained in:
Habib Gahbiche 2021-01-28 10:43:29 +01:00 committed by Sergey Sharybin
parent 61d1fd7e2f
commit 51c8d53a7d
Notes: blender-bot 2023-02-14 07:17:43 +01:00
Referenced by issue #84512, Crash - Compositor. Depth pass in the "size" input socket of "Blur" node. Only Cycles.
4 changed files with 4 additions and 0 deletions

View File

@ -68,6 +68,7 @@ void GaussianAlphaXBlurOperation::updateGauss()
if (this->m_distbuf_inv == nullptr) {
updateSize();
float rad = max_ff(m_size * m_data.sizex, 0.0f);
rad = min_ff(rad, MAX_GAUSSTAB_RADIUS);
m_filtersize = min_ii(ceil(rad), MAX_GAUSSTAB_RADIUS);
m_distbuf_inv = BlurBaseOperation::make_dist_fac_inverse(rad, m_filtersize, m_falloff);

View File

@ -60,6 +60,7 @@ void GaussianAlphaYBlurOperation::updateGauss()
if (this->m_gausstab == nullptr) {
updateSize();
float rad = max_ff(m_size * m_data.sizey, 0.0f);
rad = min_ff(rad, MAX_GAUSSTAB_RADIUS);
m_filtersize = min_ii(ceil(rad), MAX_GAUSSTAB_RADIUS);
m_gausstab = BlurBaseOperation::make_gausstab(rad, m_filtersize);

View File

@ -66,6 +66,7 @@ void GaussianXBlurOperation::updateGauss()
if (this->m_gausstab == nullptr) {
updateSize();
float rad = max_ff(m_size * m_data.sizex, 0.0f);
rad = min_ff(rad, MAX_GAUSSTAB_RADIUS);
m_filtersize = min_ii(ceil(rad), MAX_GAUSSTAB_RADIUS);
this->m_gausstab = BlurBaseOperation::make_gausstab(rad, m_filtersize);

View File

@ -65,6 +65,7 @@ void GaussianYBlurOperation::updateGauss()
if (this->m_gausstab == nullptr) {
updateSize();
float rad = max_ff(m_size * m_data.sizey, 0.0f);
rad = min_ff(rad, MAX_GAUSSTAB_RADIUS);
m_filtersize = min_ii(ceil(rad), MAX_GAUSSTAB_RADIUS);
this->m_gausstab = BlurBaseOperation::make_gausstab(rad, m_filtersize);