| 439 | } |
| 440 | |
| 441 | static |
| 442 | void skip_element(long thrift_typeID, PHPInputTransport& transport) { |
| 443 | switch (thrift_typeID) { |
| 444 | case T_STOP: |
| 445 | case T_VOID: |
| 446 | return; |
| 447 | case T_STRUCT: |
| 448 | while (true) { |
| 449 | int8_t ttype = transport.readI8(); // get field type |
| 450 | if (ttype == T_STOP) break; |
| 451 | transport.skip(2); // skip field number, I16 |
| 452 | skip_element(ttype, transport); // skip field payload |
| 453 | } |
| 454 | return; |
| 455 | case T_BOOL: |
| 456 | case T_BYTE: |
| 457 | transport.skip(1); |
| 458 | return; |
| 459 | case T_I16: |
| 460 | transport.skip(2); |
| 461 | return; |
| 462 | case T_I32: |
| 463 | transport.skip(4); |
| 464 | return; |
| 465 | case T_U64: |
| 466 | case T_I64: |
| 467 | case T_DOUBLE: |
| 468 | transport.skip(8); |
| 469 | return; |
| 470 | //case T_UTF7: // aliases T_STRING |
| 471 | case T_UTF8: |
| 472 | case T_UTF16: |
| 473 | case T_STRING: { |
| 474 | uint32_t len = transport.readU32(); |
| 475 | transport.skip(len); |
| 476 | } return; |
| 477 | case T_MAP: { |
| 478 | int8_t keytype = transport.readI8(); |
| 479 | int8_t valtype = transport.readI8(); |
| 480 | uint32_t size = transport.readU32(); |
| 481 | for (uint32_t i = 0; i < size; ++i) { |
| 482 | skip_element(keytype, transport); |
| 483 | skip_element(valtype, transport); |
| 484 | } |
| 485 | } return; |
| 486 | case T_LIST: |
| 487 | case T_SET: { |
| 488 | int8_t valtype = transport.readI8(); |
| 489 | uint32_t size = transport.readU32(); |
| 490 | for (uint32_t i = 0; i < size; ++i) { |
| 491 | skip_element(valtype, transport); |
| 492 | } |
| 493 | } return; |
| 494 | }; |
| 495 | |
| 496 | char errbuf[128]; |
| 497 | sprintf(errbuf, "Unknown thrift typeID %ld", thrift_typeID); |
| 498 | throw_tprotocolexception(errbuf, INVALID_DATA); |
no test coverage detected