| 212 | } |
| 213 | |
| 214 | static void test_bracket_escapes(void) |
| 215 | { |
| 216 | bencode_buffer_t buf; |
| 217 | int t = 1; |
| 218 | |
| 219 | /* 1. Double-dash escapes to equals: fmtp:96..useinbandfec--1 |
| 220 | * '..' -> ' ', '--' -> '=' => "fmtp:96 useinbandfec=1" */ |
| 221 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 222 | ok(check_bencode("fmtp:96..useinbandfec--1", 24, |
| 223 | "l22:fmtp:96 useinbandfec=1e", &buf, 0), |
| 224 | "test-bracket-escape-%d", t++); |
| 225 | bencode_buffer_free(&buf); |
| 226 | |
| 227 | /* 2. Double-dot escapes to space: rtpmap:96..opus/48000/2 |
| 228 | * => "rtpmap:96 opus/48000/2" */ |
| 229 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 230 | ok(check_bencode("rtpmap:96..opus/48000/2", 23, |
| 231 | "l22:rtpmap:96 opus/48000/2e", &buf, 0), |
| 232 | "test-bracket-escape-%d", t++); |
| 233 | bencode_buffer_free(&buf); |
| 234 | |
| 235 | /* 3. No escapes - single dash/dot pass through unchanged */ |
| 236 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 237 | ok(check_bencode("a-b c.d", 7, |
| 238 | "l3:a-b3:c.de", &buf, 0), |
| 239 | "test-bracket-escape-%d", t++); |
| 240 | bencode_buffer_free(&buf); |
| 241 | |
| 242 | /* 4. Consecutive escapes: ---- becomes == */ |
| 243 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 244 | ok(check_bencode("a----b", 6, |
| 245 | "l4:a==be", &buf, 0), |
| 246 | "test-bracket-escape-%d", t++); |
| 247 | bencode_buffer_free(&buf); |
| 248 | |
| 249 | /* 5. Escape at end of token: foo-- becomes foo= */ |
| 250 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 251 | ok(check_bencode("foo--", 5, |
| 252 | "l4:foo=e", &buf, 0), |
| 253 | "test-bracket-escape-%d", t++); |
| 254 | bencode_buffer_free(&buf); |
| 255 | |
| 256 | /* 6. Escape in dict value: key=val--ue => key: "val=ue" */ |
| 257 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 258 | ok(check_bencode("key=val--ue", 11, |
| 259 | "d3:key6:val=uee", &buf, 0), |
| 260 | "test-bracket-escape-%d", t++); |
| 261 | bencode_buffer_free(&buf); |
| 262 | |
| 263 | /* 7. sdp-attr real-world case: add=[fmtp:96..useinbandfec--1] */ |
| 264 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
| 265 | ok(check_bencode("add=[fmtp:96..useinbandfec--1]", 30, |
| 266 | "d3:addl22:fmtp:96 useinbandfec=1ee", &buf, 0), |
| 267 | "test-bracket-escape-%d", t++); |
| 268 | bencode_buffer_free(&buf); |
| 269 | |
| 270 | /* 8. Mixed escape and no-escape tokens in a list */ |
| 271 | ok(bencode_buffer_init(&buf) == 0, "test-bracket-escape-%d", t++); |
no test coverage detected