diff options
| author | Thomas Knudsen <thokn@sdfe.dk> | 2017-11-22 08:34:16 +0100 |
|---|---|---|
| committer | Thomas Knudsen <thokn@sdfe.dk> | 2017-11-22 08:34:16 +0100 |
| commit | d75ca721708dbe8ac55bb3df9ca077848fa5fb63 (patch) | |
| tree | 603c9bc85bb28acad7d1cbc25b29676d35c62367 /src | |
| parent | 5f1522ad7652e562f98328b05d905c407bab99e9 (diff) | |
| download | PROJ-d75ca721708dbe8ac55bb3df9ca077848fa5fb63.tar.gz PROJ-d75ca721708dbe8ac55bb3df9ca077848fa5fb63.zip | |
Avoid div-by-0 in to_meter init
Diffstat (limited to 'src')
| -rw-r--r-- | src/pj_init.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/pj_init.c b/src/pj_init.c index 0cdfcc4d..62dea1f2 100644 --- a/src/pj_init.c +++ b/src/pj_init.c @@ -627,12 +627,22 @@ pj_init_ctx(projCtx ctx, int argc, char **argv) { s = pj_units[i].to_meter; } if (s || (s = pj_param(ctx, start, "sto_meter").s)) { - PIN->to_meter = pj_strtod(s, &s); - if (*s == '/') /* ratio number */ - PIN->to_meter /= pj_strtod(++s, 0); - if (PIN->to_meter <= 0.0) + double factor; + int ratio = 0; + + /* ratio number? */ + if (*s == '/') { + ratio = 1; + s++; + } + + factor = pj_strtod(s, &s); + if ((factor <= 0.0) || (1/factor==0)) return pj_default_destructor (PIN, PJD_ERR_UNIT_FACTOR_LESS_THAN_0); - PIN->fr_meter = 1. / PIN->to_meter; + + PIN->to_meter = ratio? 1 / factor: factor; + PIN->fr_meter = 1 / PIN->to_meter; + } else PIN->to_meter = PIN->fr_meter = 1.; |
