1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

fix exception inheritance and change exception names in DNS code

This commit is contained in:
Gaya Cohen
2021-06-09 15:57:04 +03:00
parent ed2b3c12d5
commit 137b56d5a7
2 changed files with 6 additions and 4 deletions

View File

@@ -64,6 +64,7 @@ public:
class malformed_packet : public exception_base { class malformed_packet : public exception_base {
public: public:
malformed_packet() : exception_base("Malformed packet") { } malformed_packet() : exception_base("Malformed packet") { }
malformed_packet(const std::string& message) : exception_base(message) { }
}; };
/** /**
@@ -71,7 +72,7 @@ public:
*/ */
class dns_decompression_pointer_out_of_bounds : public malformed_packet { class dns_decompression_pointer_out_of_bounds : public malformed_packet {
public: public:
dns_decompression_pointer_out_of_bounds() : exception_base("DNS decompression: pointer out of bounds") { } dns_decompression_pointer_out_of_bounds() : malformed_packet("DNS decompression: pointer out of bounds") { }
}; };
/** /**
@@ -79,9 +80,10 @@ public:
*/ */
class dns_decompression_pointer_loops : public malformed_packet { class dns_decompression_pointer_loops : public malformed_packet {
public: public:
dns_decompression_pointer_loops() : exception_base("DNS decompression: pointer loops") { } dns_decompression_pointer_loops() : malformed_packet("DNS decompression: pointer loops") { }
}; };
/** /**
* \brief Exception thrown when serializing a packet fails. * \brief Exception thrown when serializing a packet fails.
*/ */

View File

@@ -339,7 +339,7 @@ uint32_t DNS::compose_name(const uint8_t* ptr, char* out_ptr) const {
uint8_t pointer_counter = 0; uint8_t pointer_counter = 0;
while (*ptr) { while (*ptr) {
if (pointer_counter++ > 30){ if (pointer_counter++ > 30){
throw DNS_decompression_pointer_loops(); throw dns_decompression_pointer_loops();
} }
// It's an offset // It's an offset
if ((*ptr & 0xc0)) { if ((*ptr & 0xc0)) {
@@ -351,7 +351,7 @@ uint32_t DNS::compose_name(const uint8_t* ptr, char* out_ptr) const {
index = Endian::be_to_host(index) & 0x3fff; index = Endian::be_to_host(index) & 0x3fff;
// Check that the offset is neither too low or too high // Check that the offset is neither too low or too high
if (index < 0x0c || (&records_data_[0] + (index - 0x0c)) >= end) { if (index < 0x0c || (&records_data_[0] + (index - 0x0c)) >= end) {
throw DNS_decompression_pointer_out_of_bounds(); throw dns_decompression_pointer_out_of_bounds();
} }
// We've probably found the end of the original domain name. Save it. // We've probably found the end of the original domain name. Save it.
if (end_ptr == 0) { if (end_ptr == 0) {