Decompression failure of specific IPv4 stream with changing RND
Affects | Status | Importance | Assigned to | Milestone | ||
---|---|---|---|---|---|---|
rohc | Status tracked in Rohc-main | |||||
1.3.x |
Invalid
|
Undecided
|
Didier Barvaux | |||
1.4.x |
Invalid
|
Undecided
|
Didier Barvaux | |||
Rohc-1.5.x |
Fix Released
|
Medium
|
Didier Barvaux | |||
Rohc-main |
Fix Released
|
Medium
|
Didier Barvaux |
Bug Description
The ROHC library fails to decompress the attached stream. It is one IPv4 stream with changing RND (RND=1 -> RND=0) and less than 5 bits of IP-ID delta to transmit.
As RND changed, the extension 3 is required. As there are some IP-ID bits to transmit, the UOR-2-ID packet is chosen. As there are less than 5 bits of IP-ID delta to transmit, the compressor puts these bits in the UOR-2-ID base header. Because the RND flag changed, the compressor also puts 16 bits of IP-ID delta in extension 3 (flag I=1). The decompressor fails to decompress such a packet because it receives more than 16 bits of IP-ID delta.
Solution:
1/ at compressor, put zeroes in the 5 bits of the UOR-2-ID base header if RND flag changed in the last few packets.
2/ at decompressor, warn about > 16 IP-ID bits but do not stop parsing, simply ignore superfluous bits.
For the 2nd point, stop parsing if ROHC_RFC_
Confirmed on 1.5.x branch.