]> git.sesse.net Git - greproxy/commitdiff
Fix another crippling RS decoding bug.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 8 Feb 2015 00:32:21 +0000 (01:32 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 8 Feb 2015 00:32:21 +0000 (01:32 +0100)
rsdecoder.cpp

index 8a27896d8dedd70f2c3b8094e703a8c81eadd661..9ba69a504ef98cf9bcd971e06b93f59e4e60103a 100644 (file)
@@ -95,13 +95,18 @@ void RSDecoder::send_packet(uint16_t proto, const std::string &data, int incomin
                                const auto it = group.packets.find(packet_num);
                                if (it == group.packets.end()) {
                                        missing_packets.push_back(i);
-                               } else {
+                               } else if (i < RS_PAYLOAD_SIZE) {
+                                       // Regular packet.
                                        const GREPacket &packet = it->second;
                                        uint16_t proto_be = htons(packet.proto);
                                        memcpy(&p[0], &proto_be, sizeof(uint16_t));
                                        uint16_t len_be = htons(packet.data.size());
                                        memcpy(&p[2], &len_be, sizeof(uint16_t));
                                        memcpy(&p[4], packet.data.data(), packet.data.size());
+                               } else {
+                                       // RS packet.
+                                       const GREPacket &packet = it->second;
+                                       memcpy(&p[0], packet.data.data(), packet.data.size());
                                }
                                padded_packets.push_back(p);
                        }