diff options
Diffstat (limited to '')
-rw-r--r-- | src/packet/record.c | 19 |
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; |