aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2017-05-23 22:57:19 +0200
committerKristian Evers <kristianevers@gmail.com>2017-05-24 11:20:08 +0200
commitc097d89cc36d16509bdf0bad4f046313468b5063 (patch)
tree30a39b0c8621bfae8649973ab2879a6b5a0c4ff6 /src
parentfe843d11b4b5f58e09e896848ce4354170bf14bc (diff)
downloadPROJ-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.c8
-rw-r--r--src/pj_strerrno.c1
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) {