From 19b95a5f372b0b621a16699d7e6ebb2717a31314 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Sun, 23 Aug 2020 01:38:17 +1000 Subject: [PATCH] Correctly encode LOC records with non integer negative altitudes. (cherry picked from commit 337cc878fa5c6a93664b402a5fb7ee06d9b3a0f2) Conflict: modify seg2 Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/19b95a5f372b0b621a16699d7e6ebb2717a31314 --- lib/dns/rdata/generic/loc_29.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/dns/rdata/generic/loc_29.c b/lib/dns/rdata/generic/loc_29.c index 0ef4360ffe..1e29d92ba9 100644 --- a/lib/dns/rdata/generic/loc_29.c +++ b/lib/dns/rdata/generic/loc_29.c @@ -27,6 +27,7 @@ fromtext_loc(ARGS_FROMTEXT) { unsigned char version; bool east = false; bool north = false; + bool negative = false; long tmp; long m; long cm; @@ -280,6 +281,9 @@ fromtext_loc(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); + if (DNS_AS_STR(token)[0] == '-') { + negative = true; + } m = strtol(DNS_AS_STR(token), &e, 10); if (*e != 0 && *e != '.' && *e != 'm') RETTOK(DNS_R_SYNTAX); @@ -324,6 +328,9 @@ fromtext_loc(ARGS_FROMTEXT) { /* * Adjust base. */ + if (m < 0 || negative) { + cm = -cm; + } altitude = m + 100000; altitude *= 100; altitude += cm; -- 2.23.0