Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2016-09-10 21:15:52 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-09-14 11:26:20 +0300
commitf6fb072ab241fb490c98ef56c1215f593677db06 (patch)
tree05668af782d51ab5a456eec7338ab5c889f5a1e3 /intern/opensubdiv
parent16135990cd92a4042413a06f8c65948540b7d598 (diff)
Fix OpenSubdiv related buffer overrun with multiple FVar channels.
The existing code uses the input value count of the first channel for all of them. If the first channel is the largest, it leads to a crash-causing buffer overrun in memcpy below. Likely this was left since the time when only one channel was supported. As a crash fix, probably should go into 2.78
Diffstat (limited to 'intern/opensubdiv')
-rw-r--r--intern/opensubdiv/opensubdiv_capi.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/intern/opensubdiv/opensubdiv_capi.cc b/intern/opensubdiv/opensubdiv_capi.cc
index ab904953c70..52ce98fe74b 100644
--- a/intern/opensubdiv/opensubdiv_capi.cc
+++ b/intern/opensubdiv/opensubdiv_capi.cc
@@ -165,7 +165,7 @@ static void interpolate_fvar_data(OpenSubdiv::Far::TopologyRefiner& refiner,
const int max_level = refiner.GetMaxLevel();
size_t fvar_data_offset = 0, values_offset = 0;
for (int channel = 0; channel < refiner.GetNumFVarChannels(); ++channel) {
- const int num_values = refiner.GetLevel(0).GetNumFVarValues(0) * 2,
+ const int num_values = refiner.GetLevel(0).GetNumFVarValues(channel) * 2,
num_values_max = refiner.GetLevel(max_level).GetNumFVarValues(channel),
num_values_total = refiner.GetNumFVarValuesTotal(channel);
if (num_values_total <= 0) {