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:
parent
f2021971f0
commit
fc8eb981fe
1 changed files with 4 additions and 1 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue