From 0927fe6fc45da77c07088e6e50528f346974732c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 11 Mar 2021 13:22:05 +0100 Subject: [PATCH] - Fix parse of LOC RR type for decimetres. --- doc/Changelog | 3 +++ sldns/str2wire.c | 6 +++++- testdata/test_ldnsrr.5 | 2 ++ testdata/test_ldnsrr.c5 | 2 ++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 3b3073405..b6bbfa210 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +11 March 2021: Wouter + - Fix parse of LOC RR type for decimetres. + 5 March 2021: Wouter - Workaround for #439: prevent loops in the reuse rbtree. - Debug output for #411 and #439: printout internal error and details. diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 977cda28a..70eec6dab 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -1491,13 +1491,17 @@ static int loc_parse_cm(char* my_str, char** endstr, uint8_t* m, uint8_t* e) { uint32_t meters = 0, cm = 0, val; + char* cm_endstr; while (isblank((unsigned char)*my_str)) { my_str++; } meters = (uint32_t)strtol(my_str, &my_str, 10); if (*my_str == '.') { my_str++; - cm = (uint32_t)strtol(my_str, &my_str, 10); + cm = (uint32_t)strtol(my_str, &cm_endstr, 10); + if(cm_endstr == my_str + 1) + cm *= 10; + my_str = cm_endstr; } if (meters >= 1) { *e = 2; diff --git a/testdata/test_ldnsrr.5 b/testdata/test_ldnsrr.5 index 9be72b4aa..c6e7ea2ba 100644 --- a/testdata/test_ldnsrr.5 +++ b/testdata/test_ldnsrr.5 @@ -170,3 +170,5 @@ example. 86400 IN ZONEMD 2018031900 241 1 ( e1846540e33a9e41 89792d18d5 uri.arpa. 3600 IN ZONEMD 2018100702 1 1 ( 1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fa dc556439889a10eaf6f11d615900a4f996bd46279514e473 ) ; from draft-ietf-dnsop-dns-zone-digest-12#section-A.5 root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) +; from ldns issue #121, 0.10m was parsed as 0.01m. +foo. 12345 IN LOC 12 45 52.333 N 105 40 33.452 W -24m 0.1m 0.1m 0.1m diff --git a/testdata/test_ldnsrr.c5 b/testdata/test_ldnsrr.c5 index 98c2ed380..f30aa0b73 100644 --- a/testdata/test_ldnsrr.c5 +++ b/testdata/test_ldnsrr.c5 @@ -210,3 +210,5 @@ example. 86400 IN ZONEMD 2018031900 241 1 E1846540E33A9E4189792D18D5D131F605FC28 uri.arpa. 3600 IN ZONEMD 2018100702 1 1 1291B78DDF7669B1A39D014D87626B709B55774C5D7D58FADC556439889A10EAF6F11D615900A4F996BD46279514E473 0C726F6F742D73657276657273036E657400003F00010036EE8000367849A05C0101F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 +03666F6F00001D00010000303900100011111182BD2D4D69530BD400988D20 +foo. 12345 IN LOC 12 45 52.333 N 105 40 33.452 W -24m 0.10m 0.10m 0.10m -- 2.47.2