unsigned long latitude;
unsigned long longitude;
unsigned long altitude;
+ bool ok;
REQUIRE(type == dns_rdatatype_loc);
if (s1 < 0 || s1 > 59) {
RETTOK(ISC_R_RANGE);
}
+ ok = e != DNS_AS_STR(token);
if (*e == '.') {
const char *l;
e++;
if ((tmp = decvalue(*e++)) < 0) {
RETTOK(DNS_R_SYNTAX);
}
+ ok = true;
s1 *= 10;
s1 += tmp;
}
} else {
s1 *= 1000;
}
+ if (!ok) {
+ RETTOK(DNS_R_SYNTAX);
+ }
if (d1 == 90 && s1 != 0) {
RETTOK(ISC_R_RANGE);
}
if (s2 < 0 || s2 > 59) {
RETTOK(ISC_R_RANGE);
}
+ ok = e != DNS_AS_STR(token);
if (*e == '.') {
const char *l;
e++;
if ((tmp = decvalue(*e++)) < 0) {
RETTOK(DNS_R_SYNTAX);
}
+ ok = true;
s2 *= 10;
s2 += tmp;
}
} else {
s2 *= 1000;
}
+ if (!ok) {
+ RETTOK(DNS_R_SYNTAX);
+ }
if (d2 == 180 && s2 != 0) {
RETTOK(ISC_R_RANGE);
}
RETTOK(ISC_R_RANGE);
}
cm = 0;
+ ok = e != DNS_AS_STR(token);
if (*e == '.') {
e++;
for (i = 0; i < 2; i++) {
if ((tmp = decvalue(*e++)) < 0) {
return (DNS_R_SYNTAX);
}
+ ok = true;
cm *= 10;
if (m < 0) {
cm -= tmp;
if (*e == 'm') {
e++;
}
- if (*e != 0) {
+ if (!ok || *e != 0) {
RETTOK(DNS_R_SYNTAX);
}
if (m == -100000 && cm != 0) {
RETTOK(ISC_R_RANGE);
}
cm = 0;
+ ok = e != DNS_AS_STR(token);
if (*e == '.') {
e++;
for (i = 0; i < 2; i++) {
if ((tmp = decvalue(*e++)) < 0) {
RETTOK(DNS_R_SYNTAX);
}
+ ok = true;
cm *= 10;
cm += tmp;
}
if (*e == 'm') {
e++;
}
- if (*e != 0) {
+ if (!ok || *e != 0) {
RETTOK(DNS_R_SYNTAX);
}
/*
RETTOK(ISC_R_RANGE);
}
cm = 0;
+ ok = e != DNS_AS_STR(token);
if (*e == '.') {
e++;
for (i = 0; i < 2; i++) {
if ((tmp = decvalue(*e++)) < 0) {
RETTOK(DNS_R_SYNTAX);
}
+ ok = true;
cm *= 10;
cm += tmp;
}
if (*e == 'm') {
e++;
}
- if (*e != 0) {
+ if (!ok || *e != 0) {
RETTOK(DNS_R_SYNTAX);
}
/*
RETTOK(ISC_R_RANGE);
}
cm = 0;
+ ok = e != DNS_AS_STR(token);
if (*e == '.') {
e++;
for (i = 0; i < 2; i++) {
if ((tmp = decvalue(*e++)) < 0) {
RETTOK(DNS_R_SYNTAX);
}
+ ok = true;
cm *= 10;
cm += tmp;
}
if (*e == 'm') {
e++;
}
- if (*e != 0) {
+ if (!ok || *e != 0) {
RETTOK(DNS_R_SYNTAX);
}
/*
dns_rdatatype_key, sizeof(dns_rdata_key_t));
}
+/*
+ * LOC tests.
+ */
+static void
+loc(void **state) {
+ text_ok_t text_ok[] = {
+ TEXT_VALID_CHANGED("0 N 0 E 0", "0 0 0.000 N 0 0 0.000 E 0.00m "
+ "1m 10000m 10m"),
+ TEXT_VALID_CHANGED("0 S 0 W 0", "0 0 0.000 N 0 0 0.000 E 0.00m "
+ "1m 10000m 10m"),
+ TEXT_VALID_CHANGED("0 0 N 0 0 E 0", "0 0 0.000 N 0 0 0.000 E "
+ "0.00m 1m 10000m 10m"),
+ TEXT_VALID_CHANGED("0 0 0 N 0 0 0 E 0",
+ "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+ "10m"),
+ TEXT_VALID_CHANGED("0 0 0 N 0 0 0 E 0",
+ "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+ "10m"),
+ TEXT_VALID_CHANGED("0 0 0. N 0 0 0. E 0",
+ "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+ "10m"),
+ TEXT_VALID_CHANGED("0 0 .0 N 0 0 .0 E 0",
+ "0 0 0.000 N 0 0 0.000 E 0.00m 1m 10000m "
+ "10m"),
+ TEXT_INVALID("0 0 . N 0 0 0. E 0"),
+ TEXT_INVALID("0 0 0. N 0 0 . E 0"),
+ TEXT_INVALID("0 0 0. N 0 0 0. E m"),
+ TEXT_INVALID("0 0 0. N 0 0 0. E 0 ."),
+ TEXT_INVALID("0 0 0. N 0 0 0. E 0 m"),
+ TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 ."),
+ TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 m"),
+ TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 0 ."),
+ TEXT_INVALID("0 0 0. N 0 0 0. E 0 0 0 m"),
+ TEXT_VALID_CHANGED("90 N 180 E 0", "90 0 0.000 N 180 0 0.000 E "
+ "0.00m 1m 10000m 10m"),
+ TEXT_INVALID("90 1 N 180 E 0"),
+ TEXT_INVALID("90 0 1 N 180 E 0"),
+ TEXT_INVALID("90 N 180 1 E 0"),
+ TEXT_INVALID("90 N 180 0 1 E 0"),
+ TEXT_VALID_CHANGED("90 S 180 W 0", "90 0 0.000 S 180 0 0.000 W "
+ "0.00m 1m 10000m 10m"),
+ TEXT_INVALID("90 1 S 180 W 0"),
+ TEXT_INVALID("90 0 1 S 180 W 0"),
+ TEXT_INVALID("90 S 180 1 W 0"),
+ TEXT_INVALID("90 S 180 0 1 W 0"),
+ /*
+ * Sentinel.
+ */
+ TEXT_SENTINEL()
+ };
+
+ UNUSED(state);
+
+ check_rdata(text_ok, 0, NULL, false, dns_rdataclass_in,
+ dns_rdatatype_loc, sizeof(dns_rdata_loc_t));
+}
+
/*
* http://ana-3.lcs.mit.edu/~jnc/nimrod/dns.txt
*
cmocka_unit_test_setup_teardown(hip, _setup, _teardown),
cmocka_unit_test_setup_teardown(isdn, _setup, _teardown),
cmocka_unit_test_setup_teardown(key, _setup, _teardown),
+ cmocka_unit_test_setup_teardown(loc, _setup, _teardown),
cmocka_unit_test_setup_teardown(nimloc, _setup, _teardown),
cmocka_unit_test_setup_teardown(nsec, _setup, _teardown),
cmocka_unit_test_setup_teardown(nsec3, _setup, _teardown),