[Bf-blender-cvs] [467a19c] gooseberry: Fix for some archive checks to make sure we don't access invalid data.
Lukas Tönne
noreply at git.blender.org
Mon Mar 23 13:03:02 CET 2015
Commit: 467a19c6efaebc98d4520bbb88603cfada17a8cf
Author: Lukas Tönne
Date: Mon Mar 9 12:52:51 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB467a19c6efaebc98d4520bbb88603cfada17a8cf
Fix for some archive checks to make sure we don't access invalid data.
This can happen if the archive file cannot be opened for some reason.
===================================================================
M source/blender/pointcache/alembic/abc_cloth.cpp
M source/blender/pointcache/alembic/abc_mesh.cpp
M source/blender/pointcache/alembic/abc_particles.cpp
M source/blender/pointcache/alembic/abc_reader.cpp
M source/blender/pointcache/alembic/abc_writer.cpp
===================================================================
diff --git a/source/blender/pointcache/alembic/abc_cloth.cpp b/source/blender/pointcache/alembic/abc_cloth.cpp
index 1cd95d3..b00a3b5 100644
--- a/source/blender/pointcache/alembic/abc_cloth.cpp
+++ b/source/blender/pointcache/alembic/abc_cloth.cpp
@@ -146,7 +146,7 @@ void AbcClothReader::open_archive(ReaderArchive *archive)
BLI_assert(dynamic_cast<AbcReaderArchive*>(archive));
AbcReader::abc_archive(static_cast<AbcReaderArchive*>(archive));
- if (abc_archive()->archive.valid()) {
+ if (abc_archive()->archive) {
IObject root = abc_archive()->archive.getTop();
if (root.valid() && root.getChild(m_name)) {
m_points = IPoints(root, m_name);
diff --git a/source/blender/pointcache/alembic/abc_mesh.cpp b/source/blender/pointcache/alembic/abc_mesh.cpp
index eb0ceac..b9bf123 100644
--- a/source/blender/pointcache/alembic/abc_mesh.cpp
+++ b/source/blender/pointcache/alembic/abc_mesh.cpp
@@ -326,7 +326,7 @@ void AbcDerivedMeshReader::open_archive(ReaderArchive *archive)
BLI_assert(dynamic_cast<AbcReaderArchive*>(archive));
AbcReader::abc_archive(static_cast<AbcReaderArchive*>(archive));
- if (abc_archive()->archive.valid()) {
+ if (abc_archive()->archive) {
IObject root = abc_archive()->archive.getTop();
if (root.valid() && root.getChild(m_name)) {
m_mesh = IPolyMesh(root, m_name);
diff --git a/source/blender/pointcache/alembic/abc_particles.cpp b/source/blender/pointcache/alembic/abc_particles.cpp
index 060c2a6..5b5aae9 100644
--- a/source/blender/pointcache/alembic/abc_particles.cpp
+++ b/source/blender/pointcache/alembic/abc_particles.cpp
@@ -99,7 +99,7 @@ void AbcParticlesReader::open_archive(ReaderArchive *archive)
BLI_assert(dynamic_cast<AbcReaderArchive*>(archive));
AbcReader::abc_archive(static_cast<AbcReaderArchive*>(archive));
- if (abc_archive()->archive.valid()) {
+ if (abc_archive()->archive) {
IObject root = abc_archive()->archive.getTop();
m_points = IPoints(root, m_name);
}
@@ -183,6 +183,9 @@ void AbcParticlePathcacheWriter::open_archive(WriterArchive *archive)
BLI_assert(dynamic_cast<AbcWriterArchive*>(archive));
AbcWriter::abc_archive(static_cast<AbcWriterArchive*>(archive));
+ if (!abc_archive()->archive)
+ return;
+
OObject root = abc_archive()->archive.getTop();
/* XXX non-escaped string construction here ... */
m_curves = OCurves(root, m_name + m_suffix, abc_archive()->frame_sampling_index());
@@ -388,7 +391,7 @@ void AbcParticlePathcacheReader::open_archive(ReaderArchive *archive)
BLI_assert(dynamic_cast<AbcReaderArchive*>(archive));
AbcReader::abc_archive(static_cast<AbcReaderArchive*>(archive));
- if (abc_archive()->archive.valid()) {
+ if (abc_archive()->archive) {
IObject root = abc_archive()->archive.getTop();
if (root.valid()) {
/* XXX non-escaped string construction here ... */
diff --git a/source/blender/pointcache/alembic/abc_reader.cpp b/source/blender/pointcache/alembic/abc_reader.cpp
index 6195014..148d78e 100644
--- a/source/blender/pointcache/alembic/abc_reader.cpp
+++ b/source/blender/pointcache/alembic/abc_reader.cpp
@@ -49,7 +49,7 @@ AbcReaderArchive::~AbcReaderArchive()
bool AbcReaderArchive::get_frame_range(int &start_frame, int &end_frame)
{
- if (archive.valid()) {
+ if (archive) {
double start_time, end_time;
GetArchiveStartAndEndTime(archive, start_time, end_time);
start_frame = (int)time_to_frame(start_time);
@@ -64,7 +64,10 @@ bool AbcReaderArchive::get_frame_range(int &start_frame, int &end_frame)
std::string AbcReaderArchive::get_info()
{
- return abc_archive_info(archive);
+ if (archive)
+ return abc_archive_info(archive);
+ else
+ return "";
}
ISampleSelector AbcReaderArchive::get_frame_sample_selector(float frame)
@@ -74,7 +77,7 @@ ISampleSelector AbcReaderArchive::get_frame_sample_selector(float frame)
PTCReadSampleResult AbcReaderArchive::test_sample(float frame)
{
- if (archive.valid()) {
+ if (archive) {
double start_time, end_time;
GetArchiveStartAndEndTime(archive, start_time, end_time);
float start_frame = time_to_frame(start_time);
diff --git a/source/blender/pointcache/alembic/abc_writer.cpp b/source/blender/pointcache/alembic/abc_writer.cpp
index 80632d3..9c66d60 100644
--- a/source/blender/pointcache/alembic/abc_writer.cpp
+++ b/source/blender/pointcache/alembic/abc_writer.cpp
@@ -52,9 +52,11 @@ AbcWriterArchive::AbcWriterArchive(Scene *scene, const std::string &filename, Er
// archive = OArchive(AbcCoreHDF5::WriteArchive(), filename, Abc::ErrorHandler::kThrowPolicy);
archive = OArchive(AbcCoreOgawa::WriteArchive(), filename, Abc::ErrorHandler::kThrowPolicy);
- chrono_t cycle_time = this->seconds_per_frame();
- chrono_t start_time = this->start_time();
- m_frame_sampling = archive.addTimeSampling(TimeSampling(cycle_time, start_time));
+ if (archive) {
+ chrono_t cycle_time = this->seconds_per_frame();
+ chrono_t start_time = this->start_time();
+ m_frame_sampling = archive.addTimeSampling(TimeSampling(cycle_time, start_time));
+ }
PTC_SAFE_CALL_END_HANDLER(m_error_handler)
}
More information about the Bf-blender-cvs
mailing list