mirror of
https://github.com/mfontanini/libtins
synced 2026-01-23 02:35:57 +01:00
Fixed bug triggered when parsing RadioTap in BE architectures.
This commit is contained in:
@@ -371,13 +371,13 @@ namespace Tins {
|
||||
flags:1,
|
||||
tsft:1,
|
||||
reserved3:1,
|
||||
tx_attenuation:1,
|
||||
rx_flags:1,
|
||||
db_tx_attenuation:1,
|
||||
dbm_tx_attenuation:1,
|
||||
antenna:1,
|
||||
db_signal:1,
|
||||
db_noise:1,
|
||||
rx_flags:1,
|
||||
tx_attenuation:1,
|
||||
reserved2:5,
|
||||
channel_plus:1,
|
||||
reserved1:2,
|
||||
|
||||
@@ -264,7 +264,7 @@ void RadioTap::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU
|
||||
uint8_t *buffer_start = buffer;
|
||||
assert(total_sz >= sz);
|
||||
if(!_radio.it_len)
|
||||
_radio.it_len = sz;
|
||||
_radio.it_len = Endian::host_to_le<uint16_t>(sz);
|
||||
memcpy(buffer, &_radio, sizeof(_radio));
|
||||
buffer += sizeof(_radio);
|
||||
if(_radio.tsft) {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#include "radiotap.h"
|
||||
#include "dot11.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std;
|
||||
@@ -10,7 +11,7 @@ using namespace Tins;
|
||||
|
||||
class RadioTapTest : public testing::Test {
|
||||
public:
|
||||
static const uint8_t expected_packet[];
|
||||
static const uint8_t expected_packet[], expected_packet1[];
|
||||
};
|
||||
|
||||
const uint8_t RadioTapTest::expected_packet[] = {
|
||||
@@ -35,6 +36,10 @@ const uint8_t RadioTapTest::expected_packet[] = {
|
||||
'\xe5', '\x2d', '\x92', '\x11'
|
||||
};
|
||||
|
||||
const uint8_t RadioTapTest::expected_packet1[] = {
|
||||
'\x00', '\x00', '\x1a', '\x00', '/', 'H', '\x00', '\x00', '\x07', '\xd6', 'n', '\xa6', '\x00', '\x00', '\x00', '\x00', '\x10', '\x02', 'l', '\t', '\xa0', '\x00', '\xb0', '\x01', '\x00', '\x00', '\x80', '\x00', '\x00', '\x00', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '|', 'O', '\xb5', '\x93', 'r', '\\', '|', 'O', '\xb5', '\x93', 'r', '\\', '\x80', 'h', 'G', 'Q', '8', '=', '\x91', '\x08', '\x00', '\x00', 'd', '\x00', '\x11', '\x04', '\x00', '\r', 'A', 'R', 'V', '7', '5', '1', '9', '9', '3', '7', '2', '5', 'C', '\x01', '\x08', '\x82', '\x84', '\x8b', '\x96', '\x12', '$', 'H', 'l', '\x03', '\x01', '\x01', '2', '\x04', '\x0c', '\x18', '0', '`', '\x07', '\x06', 'N', 'L', ' ', '\x01', '\r', '\x14', '3', '\x08', ' ', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '3', '\x08', '!', '\x05', '\x06', '\x07', '\x08', '\t', '\n', '\x0b', '\xdd', '\x0e', '\x00', 'P', '\xf2', '\x04', '\x10', 'J', '\x00', '\x01', '\x10', '\x10', 'D', '\x00', '\x01', '\x02', '\x05', '\x04', '\x00', '\x01', '\x00', '\x00', '*', '\x01', '\x04', '-', '\x1a', 'l', '\x00', '\x17', '\xff', '\xff', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '=', '\x16', '\x01', '\x03', '\x01', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x7f', '\x01', '\x01', '\xdd', '\x18', '\x00', 'P', '\xf2', '\x01', '\x01', '\x00', '\x00', 'P', '\xf2', '\x02', '\x01', '\x00', '\x00', 'P', '\xf2', '\x02', '\x01', '\x00', '\x00', 'P', '\xf2', '\x02', '\x00', '\x00', '0', '\x14', '\x01', '\x00', '\x00', '\x0f', '\xac', '\x02', '\x01', '\x00', '\x00', '\x0f', '\xac', '\x04', '\x01', '\x00', '\x00', '\x0f', '\xac', '\x02', '\x01', '\x00', '\xdd', '\x18', '\x00', 'P', '\xf2', '\x02', '\x01', '\x01', '\x00', '\x00', '\x03', '\xa4', '\x00', '\x00', '\'', '\xa4', '\x00', '\x00', 'B', 'C', '^', '\x00', 'b', '2', '/', '\x00', '\x0b', '\x05', '\x00', '\x00', '\'', 'z', '\x12', '\xdd', '\x1e', '\x00', '\x90', 'L', '3', 'l', '\x00', '\x17', '\xff', '\xff', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\xdd', '\x1a', '\x00', '\x90', 'L', '4', '\x01', '\x03', '\x01', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x91', '\x8b', '<', '\xb2'
|
||||
};
|
||||
|
||||
TEST_F(RadioTapTest, DefaultConstructor) {
|
||||
RadioTap radio;
|
||||
EXPECT_TRUE(radio.flags() & RadioTap::FCS);
|
||||
@@ -60,6 +65,17 @@ TEST_F(RadioTapTest, ConstructorFromBuffer) {
|
||||
EXPECT_EQ(radio.antenna(), 2);
|
||||
}
|
||||
|
||||
TEST_F(RadioTapTest, ConstructorFromBuffer2) {
|
||||
RadioTap radio(expected_packet1, sizeof(expected_packet1));
|
||||
EXPECT_EQ(radio.version(), 0);
|
||||
EXPECT_EQ(radio.length(), 26);
|
||||
EXPECT_EQ(radio.rate(), 2);
|
||||
EXPECT_EQ(radio.flags(), 0x10);
|
||||
EXPECT_TRUE(radio.flags() & RadioTap::FCS);
|
||||
EXPECT_EQ(radio.antenna(), 1);
|
||||
EXPECT_TRUE(radio.find_pdu<Dot11Beacon>());
|
||||
}
|
||||
|
||||
TEST_F(RadioTapTest, Serialize) {
|
||||
RadioTap radio(expected_packet, sizeof(expected_packet));
|
||||
RadioTap::serialization_type buffer = radio.serialize();
|
||||
|
||||
Reference in New Issue
Block a user