diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2018-05-23 19:00:26 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-23 19:00:26 +0200 |
| commit | 39098441ce39ca7b4ad97cec8df28a4516039a05 (patch) | |
| tree | 21ff941d8abfd6fd149dd51584be22e273e1cc76 /src | |
| parent | 37ebb8f9f0cc5083d22f84433fb2de0fdde8be00 (diff) | |
| parent | 293b4fd9465cdc9384419a84941a1e1e88d7a338 (diff) | |
| download | PROJ-39098441ce39ca7b4ad97cec8df28a4516039a05.tar.gz PROJ-39098441ce39ca7b4ad97cec8df28a4516039a05.zip | |
Merge pull request #1011 from schwehr/gie-roundtrip
Limit the number of round trips to 1 million and check for underflows
Diffstat (limited to 'src')
| -rw-r--r-- | src/gie.c | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -705,6 +705,20 @@ static int roundtrip (const char *args) { /***************************************************************************** Check how far we go from the ACCEPTed point when doing successive back/forward transformation pairs. + +Without args, roundtrip defaults to 100 iterations: + + roundtrip + +With one arg, roundtrip will default to a tolerance of T.tolerance: + + roundtrip ntrips + +With two args: + + roundtrip ntrips tolerance + +Always returns 0. ******************************************************************************/ int ntrips; double d, r, ans; @@ -719,7 +733,17 @@ back/forward transformation pairs. } ans = proj_strtod (args, &endp); - ntrips = (int) (endp==args? 100: fabs(ans)); + if (endp==args) { + /* Default to 100 iterations if not args. */ + ntrips = 100; + } else { + if (ans < 1.0 || ans > 1000000.0) { + errmsg (2, "Invalid number of roundtrips: %lf\n", ans); + return another_failing_roundtrip (); + } + ntrips = (int)ans; + } + d = strtod_scaled (endp, 1); d = d==HUGE_VAL? T.tolerance: d; |
