summaryrefslogtreecommitdiff
path: root/src/packet/record.c
diff options
context:
space:
mode:
authorTyler Murphy <tylerm@tylerm.dev>2023-04-18 11:01:56 -0400
committerTyler Murphy <tylerm@tylerm.dev>2023-04-18 11:01:56 -0400
commit5eef60aa1a6ac9e174708f19a154ce9660589b6d (patch)
tree649e238dc905b7071efc9e4a06b61bcb286ee8a0 /src/packet/record.c
parentfix makefile (diff)
downloadwrapper-main.tar.gz
wrapper-main.tar.bz2
wrapper-main.zip
Diffstat (limited to '')
-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;