summaryrefslogtreecommitdiff
path: root/src/packet/record.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet/record.c')
-rw-r--r--src/packet/record.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/packet/record.c b/src/packet/record.c
index 53934ed..c676bce 100644
--- a/src/packet/record.c
+++ b/src/packet/record.c
@@ -140,17 +140,28 @@ static void read_txt_record(PacketBuffer* buffer, Record* record) {
TXTRecord data;
data.len = 0;
data.text = malloc(sizeof(uint8_t*) * 2);
-
uint8_t capacity = 2;
+ uint8_t total = record->len;
while (1) {
if (data.len >= capacity) {
- capacity *= 2;
+ if (capacity >= 128) {
+ capacity = 255;
+ } else {
+ capacity *= 2;
+ }
data.text = realloc(data.text, sizeof(uint8_t*) * capacity);
}
-
+
buffer_read_string(buffer, &data.text[data.len]);
- if(data.text[data.len][0] == 0) break;
+ if(data.text[data.len][0] == 0) {
+ free(data.text[data.len]);
+ break;
+ }
+
data.len++;
+
+ total -= data.text[data.len - 1][0] + 1;
+ if (total == 0) break;
}
record->data.txt = data;