diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2017-05-23 22:57:19 +0200 |
|---|---|---|
| committer | Kristian Evers <kristianevers@gmail.com> | 2017-05-24 11:20:08 +0200 |
| commit | c097d89cc36d16509bdf0bad4f046313468b5063 (patch) | |
| tree | 30a39b0c8621bfae8649973ab2879a6b5a0c4ff6 /src | |
| parent | fe843d11b4b5f58e09e896848ce4354170bf14bc (diff) | |
| download | PROJ-c097d89cc36d16509bdf0bad4f046313468b5063.tar.gz PROJ-c097d89cc36d16509bdf0bad4f046313468b5063.zip | |
Avoid zero division in pj_init_ctx().
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1793
Credit to OSS-Fuzz.
Diffstat (limited to 'src')
| -rw-r--r-- | src/pj_init.c | 8 | ||||
| -rw-r--r-- | src/pj_strerrno.c | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/pj_init.c b/src/pj_init.c index fefcb8fa..bac40740 100644 --- a/src/pj_init.c +++ b/src/pj_init.c @@ -621,6 +621,10 @@ pj_init_ctx(projCtx ctx, int argc, char **argv) { PIN->to_meter = pj_strtod(s, &s); if (*s == '/') /* ratio number */ PIN->to_meter /= pj_strtod(++s, 0); + if (PIN->to_meter <= 0.0) { + pj_ctx_set_errno( ctx, -51); + goto bum_call; + } PIN->fr_meter = 1. / PIN->to_meter; } else PIN->to_meter = PIN->fr_meter = 1.; @@ -636,6 +640,10 @@ pj_init_ctx(projCtx ctx, int argc, char **argv) { PIN->vto_meter = pj_strtod(s, &s); if (*s == '/') /* ratio number */ PIN->vto_meter /= pj_strtod(++s, 0); + if (PIN->vto_meter <= 0.0) { + pj_ctx_set_errno( ctx, -51); + goto bum_call; + } PIN->vfr_meter = 1. / PIN->vto_meter; } else { PIN->vto_meter = PIN->to_meter; diff --git a/src/pj_strerrno.c b/src/pj_strerrno.c index 8a2a9c4b..36b7de8a 100644 --- a/src/pj_strerrno.c +++ b/src/pj_strerrno.c @@ -56,6 +56,7 @@ pj_err_list[] = { "point not within available datum shift grids", /* -48 */ "invalid sweep axis, choose x or y", /* -49 */ "malformed pipeline", /* -50 */ + "unit conversion factor must be > 0", /* -51 */ }; char *pj_strerrno(int err) { |
