prevent double-free in mapnik::projection

A double-free can happen when init_proj4 is called outside of the
constructor (for projections with defer_proj_init=true) and when that
call fails. In this case proj_ctx_ is not set to NULL and then freed
again in the destructor. Set to null to avoid second pj_ctx_free call.

See #2170
This commit is contained in:
Oliver Tonnhofer 2014-03-06 10:25:57 +01:00 committed by Dane Springmeyer
parent f2021971f0
commit fc8eb981fe

View file

@ -108,7 +108,10 @@ void projection::init_proj4() const
proj_ = pj_init_plus_ctx(proj_ctx_, params_.c_str()); proj_ = pj_init_plus_ctx(proj_ctx_, params_.c_str());
if (!proj_) if (!proj_)
{ {
if (proj_ctx_) pj_ctx_free(proj_ctx_); if (proj_ctx_) {
pj_ctx_free(proj_ctx_);
proj_ctx_ = 0;
}
throw proj_init_error(params_); throw proj_init_error(params_);
} }
#else #else