Changeset 51858 in vbox for trunk/src/VBox/Runtime/common/asn1
- Timestamp:
- Jul 3, 2014 7:44:21 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 94710
- Location:
- trunk/src/VBox/Runtime/common/asn1
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/asn1/asn1-dump.cpp
r51770 r51858 101 101 * @param pData The dump data structure. 102 102 * @param pAsn1Core The ASN.1 core object representation. 103 * @param pszName The member name.104 103 * @param pszType The time type name. 105 104 */ 106 static void rtAsn1DumpTime(PRTASN1DUMPDATA pData, PCRTASN1CORE pAsn1Core, const char *psz Name, const char *pszType)105 static void rtAsn1DumpTime(PRTASN1DUMPDATA pData, PCRTASN1CORE pAsn1Core, const char *pszType) 107 106 { 108 107 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT)) 109 108 { 110 109 PCRTASN1TIME pTime = (PCRTASN1TIME)pAsn1Core; 111 rtAsn1DumpPrintf(pData, "% -16s %s -- %04u-%02u-%02u %02u:%02u:%02.%09Z\n",112 psz Name, pszType,110 rtAsn1DumpPrintf(pData, "%s -- %04u-%02u-%02u %02u:%02u:%02.%09Z\n", 111 pszType, 113 112 pTime->Time.i32Year, pTime->Time.u8Month, pTime->Time.u8MonthDay, 114 113 pTime->Time.u8Hour, pTime->Time.u8Minute, pTime->Time.u8Second, … … 116 115 } 117 116 else if (pAsn1Core->cb > 0 && pAsn1Core->cb < 32 && pAsn1Core->uData.pch) 118 rtAsn1DumpPrintf(pData, "%-16s %s '%.*s'\n", 119 pszName, pszType, (size_t)pAsn1Core->cb, pAsn1Core->uData.pch); 117 rtAsn1DumpPrintf(pData, "%s '%.*s'\n", pszType, (size_t)pAsn1Core->cb, pAsn1Core->uData.pch); 120 118 else 121 rtAsn1DumpPrintf(pData, "% -16s %s -- cb=%u\n", pszName, pszType, pAsn1Core->cb);119 rtAsn1DumpPrintf(pData, "%s -- cb=%u\n", pszType, pAsn1Core->cb); 122 120 } 123 121 … … 128 126 * @param pData The dump data structure. 129 127 * @param pAsn1Core The ASN.1 core object representation. 130 * @param pszName The member name.131 128 * @param pszType The string type name. 132 129 * @param uDepth The current identation level. 133 130 */ 134 static void rtAsn1DumpString(PRTASN1DUMPDATA pData, PCRTASN1CORE pAsn1Core, const char *pszName, const char *pszType, 135 uint32_t uDepth) 131 static void rtAsn1DumpString(PRTASN1DUMPDATA pData, PCRTASN1CORE pAsn1Core, const char *pszType, uint32_t uDepth) 136 132 { 137 rtAsn1DumpPrintf(pData, "% -16s %s", pszName, pszType);133 rtAsn1DumpPrintf(pData, "%s", pszType); 138 134 139 135 const char *pszPostfix = "'\n"; … … 151 147 152 148 if (cch == 0 || !pch) 153 rtAsn1DumpPrintf(pData, " -- cb=%u\n", pszName, pszType, pAsn1Core->cb);149 rtAsn1DumpPrintf(pData, "-- cb=%u\n", pszType, pAsn1Core->cb); 154 150 else 155 151 { … … 178 174 || (uint8_t)*pch == '\'') ) 179 175 { 180 rtAsn1DumpPrintf(pData, "\\x%02 ", *pch);176 rtAsn1DumpPrintf(pData, "\\x%02x", *pch); 181 177 cch--; 182 178 pch++; … … 572 568 573 569 570 /** 571 * Dumps the type and value of an universal ASN.1 type. 572 * 573 * @returns True if it opens a child, false if not. 574 * @param pData The dumper data. 575 * @param pAsn1Core The ASN.1 object to dump. 576 * @param uDepth The current depth (for indentation). 577 */ 578 static bool rtAsn1DumpUniversalTypeAndValue(PRTASN1DUMPDATA pData, PCRTASN1CORE pAsn1Core, uint32_t uDepth) 579 { 580 const char *pszValuePrefix = "-- value:"; 581 const char *pszDefault = ""; 582 if (pAsn1Core->fFlags & RTASN1CORE_F_DEFAULT) 583 { 584 pszValuePrefix = "DEFAULT"; 585 pszDefault = "DEFAULT "; 586 } 587 588 bool fOpen = false; 589 switch (pAsn1Core->uRealTag) 590 { 591 case ASN1_TAG_BOOLEAN: 592 if (pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT) 593 rtAsn1DumpPrintf(pData, "BOOLEAN %s %RTbool\n", pszValuePrefix, ((PCRTASN1BOOLEAN)pAsn1Core)->fValue); 594 else if (pAsn1Core->cb == 1 && pAsn1Core->uData.pu8) 595 rtAsn1DumpPrintf(pData, "BOOLEAN %s %u\n", pszValuePrefix, *pAsn1Core->uData.pu8); 596 else 597 rtAsn1DumpPrintf(pData, "BOOLEAN -- cb=%u\n", pAsn1Core->cb); 598 break; 599 600 case ASN1_TAG_INTEGER: 601 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT) && pAsn1Core->cb <= 8) 602 rtAsn1DumpPrintf(pData, "INTEGER %s %llu / %#llx\n", pszValuePrefix, 603 ((PCRTASN1INTEGER)pAsn1Core)->uValue, ((PCRTASN1INTEGER)pAsn1Core)->uValue); 604 else if (pAsn1Core->cb == 0 || pAsn1Core->cb >= 512 || !pAsn1Core->uData.pu8) 605 rtAsn1DumpPrintf(pData, "INTEGER -- cb=%u\n", pAsn1Core->cb); 606 else if (pAsn1Core->cb <= 32) 607 rtAsn1DumpPrintf(pData, "INTEGER %s %.*Rhxs\n", pszValuePrefix, (size_t)pAsn1Core->cb, pAsn1Core->uData.pu8); 608 else 609 rtAsn1DumpPrintf(pData, "INTEGER %s\n%.*Rhxd\n", pszValuePrefix, (size_t)pAsn1Core->cb, pAsn1Core->uData.pu8); 610 break; 611 612 case ASN1_TAG_BIT_STRING: 613 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT)) 614 { 615 PCRTASN1BITSTRING pBitString = (PCRTASN1BITSTRING)pAsn1Core; 616 rtAsn1DumpPrintf(pData, "BIT STRING %s-- cb=%u cBits=%#x cMaxBits=%#x", 617 pszDefault, pBitString->Asn1Core.cb, pBitString->cBits, pBitString->cMaxBits); 618 if (pBitString->cBits <= 64) 619 rtAsn1DumpPrintf(pData, " value=%#llx\n", RTAsn1BitString_GetAsUInt64(pBitString)); 620 else 621 rtAsn1DumpPrintf(pData, "\n"); 622 } 623 else 624 rtAsn1DumpPrintf(pData, "BIT STRING %s-- cb=%u\n", pszDefault, pAsn1Core->cb); 625 fOpen = pAsn1Core->pOps != NULL; 626 break; 627 628 case ASN1_TAG_OCTET_STRING: 629 rtAsn1DumpPrintf(pData, "OCTET STRING %s-- cb=%u\n", pszDefault, pAsn1Core->cb); 630 fOpen = pAsn1Core->pOps != NULL; 631 break; 632 633 case ASN1_TAG_NULL: 634 rtAsn1DumpPrintf(pData, "NULL\n"); 635 break; 636 637 case ASN1_TAG_OID: 638 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT)) 639 { 640 const char *pszObjIdName = rtAsn1DumpLookupObjIdName(((PCRTASN1OBJID)pAsn1Core)->szObjId); 641 if (pszObjIdName) 642 rtAsn1DumpPrintf(pData, "OBJECT IDENTIFIER %s%s ('%s')\n", 643 pszDefault, pszObjIdName, ((PCRTASN1OBJID)pAsn1Core)->szObjId); 644 else 645 rtAsn1DumpPrintf(pData, "OBJECT IDENTIFIER %s'%s'\n", pszDefault, ((PCRTASN1OBJID)pAsn1Core)->szObjId); 646 } 647 else 648 rtAsn1DumpPrintf(pData, "OBJECT IDENTIFIER %s -- cb=%u\n", pszDefault, pAsn1Core->cb); 649 break; 650 651 case ASN1_TAG_OBJECT_DESCRIPTOR: 652 rtAsn1DumpPrintf(pData, "OBJECT DESCRIPTOR -- cb=%u TODO\n", pAsn1Core->cb); 653 break; 654 655 case ASN1_TAG_EXTERNAL: 656 rtAsn1DumpPrintf(pData, "EXTERNAL -- cb=%u TODO\n", pAsn1Core->cb); 657 break; 658 659 case ASN1_TAG_REAL: 660 rtAsn1DumpPrintf(pData, "REAL -- cb=%u TODO\n", pAsn1Core->cb); 661 break; 662 663 case ASN1_TAG_ENUMERATED: 664 rtAsn1DumpPrintf(pData, "ENUMERATED -- cb=%u TODO\n", pAsn1Core->cb); 665 break; 666 667 case ASN1_TAG_EMBEDDED_PDV: 668 rtAsn1DumpPrintf(pData, "EMBEDDED PDV -- cb=%u TODO\n", pAsn1Core->cb); 669 break; 670 671 case ASN1_TAG_UTF8_STRING: 672 rtAsn1DumpString(pData, pAsn1Core, "UTF8 STRING", uDepth); 673 break; 674 675 case ASN1_TAG_RELATIVE_OID: 676 rtAsn1DumpPrintf(pData, "RELATIVE OBJECT IDENTIFIER -- cb=%u TODO\n", pAsn1Core->cb); 677 break; 678 679 case ASN1_TAG_SEQUENCE: 680 rtAsn1DumpPrintf(pData, "SEQUENCE -- cb=%u\n", pAsn1Core->cb); 681 fOpen = true; 682 break; 683 case ASN1_TAG_SET: 684 rtAsn1DumpPrintf(pData, "SET -- cb=%u\n", pAsn1Core->cb); 685 fOpen = true; 686 break; 687 688 case ASN1_TAG_NUMERIC_STRING: 689 rtAsn1DumpString(pData, pAsn1Core, "NUMERIC STRING", uDepth); 690 break; 691 692 case ASN1_TAG_PRINTABLE_STRING: 693 rtAsn1DumpString(pData, pAsn1Core, "PRINTABLE STRING", uDepth); 694 break; 695 696 case ASN1_TAG_T61_STRING: 697 rtAsn1DumpString(pData, pAsn1Core, "T61 STRING", uDepth); 698 break; 699 700 case ASN1_TAG_VIDEOTEX_STRING: 701 rtAsn1DumpString(pData, pAsn1Core, "VIDEOTEX STRING", uDepth); 702 break; 703 704 case ASN1_TAG_IA5_STRING: 705 rtAsn1DumpString(pData, pAsn1Core, "IA5 STRING", uDepth); 706 break; 707 708 case ASN1_TAG_GRAPHIC_STRING: 709 rtAsn1DumpString(pData, pAsn1Core, "GRAPHIC STRING", uDepth); 710 break; 711 712 case ASN1_TAG_VISIBLE_STRING: 713 rtAsn1DumpString(pData, pAsn1Core, "VISIBLE STRING", uDepth); 714 break; 715 716 case ASN1_TAG_GENERAL_STRING: 717 rtAsn1DumpString(pData, pAsn1Core, "GENERAL STRING", uDepth); 718 break; 719 720 case ASN1_TAG_UNIVERSAL_STRING: 721 rtAsn1DumpString(pData, pAsn1Core, "UNIVERSAL STRING", uDepth); 722 break; 723 724 case ASN1_TAG_BMP_STRING: 725 rtAsn1DumpString(pData, pAsn1Core, "BMP STRING", uDepth); 726 break; 727 728 case ASN1_TAG_UTC_TIME: 729 rtAsn1DumpTime(pData, pAsn1Core, "UTC TIME"); 730 break; 731 732 case ASN1_TAG_GENERALIZED_TIME: 733 rtAsn1DumpTime(pData, pAsn1Core, "GENERALIZED TIME"); 734 break; 735 736 case ASN1_TAG_CHARACTER_STRING: 737 rtAsn1DumpPrintf(pData, "CHARACTER STRING -- cb=%u TODO\n", pAsn1Core->cb); 738 break; 739 740 default: 741 rtAsn1DumpPrintf(pData, "[UNIVERSAL %u]\n", pAsn1Core->uTag); 742 break; 743 } 744 return fOpen; 745 } 746 747 574 748 /** @callback_method_impl{FNRTASN1ENUMCALLBACK} */ 575 749 static DECLCALLBACK(int) rtAsn1DumpEnumCallback(PRTASN1CORE pAsn1Core, const char *pszName, uint32_t uDepth, void *pvUser) … … 579 753 return VINF_SUCCESS; 580 754 755 bool fOpen = false; 581 756 rtAsn1DumpPrintIdent(pData, uDepth); 582 583 const char *pszValuePrefix = "-- value:";584 const char *pszDefault = "";585 if (pAsn1Core->fFlags & RTASN1CORE_F_DEFAULT)586 {587 pszValuePrefix = "DEFAULT";588 pszDefault = "DEFAULT ";589 }590 591 bool fOpen = false;592 757 switch (pAsn1Core->fClass & ASN1_TAGCLASS_MASK) 593 758 { 594 759 case ASN1_TAGCLASS_UNIVERSAL: 595 switch (pAsn1Core->fFlags & RTASN1CORE_F_TAG_IMPLICIT ? pAsn1Core->uRealTag : pAsn1Core->uTag) 596 { 597 case ASN1_TAG_BOOLEAN: 598 if (pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT) 599 rtAsn1DumpPrintf(pData, "%-16s BOOLEAN %s %RTbool\n", 600 pszName, pszValuePrefix, ((PCRTASN1BOOLEAN)pAsn1Core)->fValue); 601 else if (pAsn1Core->cb == 1 && pAsn1Core->uData.pu8) 602 rtAsn1DumpPrintf(pData, "%-16s BOOLEAN %s %u\n", 603 pszName, pszValuePrefix, *pAsn1Core->uData.pu8); 604 else 605 rtAsn1DumpPrintf(pData, "%-16s BOOLEAN -- cb=%u\n", pszName, pAsn1Core->cb); 606 break; 607 608 case ASN1_TAG_INTEGER: 609 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT) && pAsn1Core->cb <= 8) 610 rtAsn1DumpPrintf(pData, "%-16s INTEGER %s %llu / %#llx\n", pszName, pszValuePrefix, 611 ((PCRTASN1INTEGER)pAsn1Core)->uValue, ((PCRTASN1INTEGER)pAsn1Core)->uValue); 612 else if (pAsn1Core->cb == 0 || pAsn1Core->cb >= 512 || !pAsn1Core->uData.pu8) 613 rtAsn1DumpPrintf(pData, "%-16s INTEGER -- cb=%u\n", pszName, pAsn1Core->cb); 614 else if (pAsn1Core->cb <= 32) 615 rtAsn1DumpPrintf(pData, "%-16s INTEGER %s %.*Rhxs\n", 616 pszName, pszValuePrefix, (size_t)pAsn1Core->cb, pAsn1Core->uData.pu8); 617 else 618 rtAsn1DumpPrintf(pData, "%-16s INTEGER %s\n%.*Rhxd\n", 619 pszName, pszValuePrefix, (size_t)pAsn1Core->cb, pAsn1Core->uData.pu8); 620 break; 621 622 case ASN1_TAG_BIT_STRING: 623 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT)) 624 { 625 PCRTASN1BITSTRING pBitString = (PCRTASN1BITSTRING)pAsn1Core; 626 rtAsn1DumpPrintf(pData, "%-16s BIT STRING %s-- cb=%u cBits=%#x cMaxBits=%#x", 627 pszName, pszDefault, pBitString->Asn1Core.cb, pBitString->cBits, pBitString->cMaxBits); 628 if (pBitString->cBits <= 64) 629 rtAsn1DumpPrintf(pData, " value=%#llx\n", RTAsn1BitString_GetAsUInt64(pBitString)); 630 else 631 rtAsn1DumpPrintf(pData, "\n"); 632 } 633 else 634 rtAsn1DumpPrintf(pData, "%-16s BIT STRING %s-- cb=%u\n", pszName, pszDefault, pAsn1Core->cb); 635 fOpen = pAsn1Core->pOps != NULL; 636 break; 637 638 case ASN1_TAG_OCTET_STRING: 639 rtAsn1DumpPrintf(pData, "%-16s OCTET STRING %s-- cb=%u\n", pszName, pszDefault, pAsn1Core->cb); 640 fOpen = pAsn1Core->pOps != NULL; 641 break; 642 643 case ASN1_TAG_NULL: 644 rtAsn1DumpPrintf(pData, "%-16s NULL\n", pszName); 645 break; 646 647 case ASN1_TAG_OID: 648 if ((pAsn1Core->fFlags & RTASN1CORE_F_PRIMITE_TAG_STRUCT)) 649 { 650 const char *pszObjIdName = rtAsn1DumpLookupObjIdName(((PCRTASN1OBJID)pAsn1Core)->szObjId); 651 if (pszObjIdName) 652 rtAsn1DumpPrintf(pData, "%-16s OBJECT IDENTIFIER %s%s ('%s')\n", 653 pszName, pszDefault, pszObjIdName, ((PCRTASN1OBJID)pAsn1Core)->szObjId); 654 else 655 rtAsn1DumpPrintf(pData, "%-16s OBJECT IDENTIFIER %s'%s'\n", 656 pszName, pszDefault, ((PCRTASN1OBJID)pAsn1Core)->szObjId); 657 } 658 else 659 rtAsn1DumpPrintf(pData, "%-16s OBJECT IDENTIFIER %s -- cb=%u\n", 660 pszName, pszDefault, pAsn1Core->cb); 661 break; 662 663 case ASN1_TAG_OBJECT_DESCRIPTOR: 664 rtAsn1DumpPrintf(pData, "%-16s OBJECT DESCRIPTOR -- cb=%u TODO\n", pszName, pAsn1Core->cb); 665 break; 666 667 case ASN1_TAG_EXTERNAL: 668 rtAsn1DumpPrintf(pData, "%-16s EXTERNAL -- cb=%u TODO\n", pszName, pAsn1Core->cb); 669 break; 670 671 case ASN1_TAG_REAL: 672 rtAsn1DumpPrintf(pData, "%-16s REAL -- cb=%u TODO\n", pszName, pAsn1Core->cb); 673 break; 674 675 case ASN1_TAG_ENUMERATED: 676 rtAsn1DumpPrintf(pData, "%-16s ENUMERATED -- cb=%u TODO\n", pszName, pAsn1Core->cb); 677 break; 678 679 case ASN1_TAG_EMBEDDED_PDV: 680 rtAsn1DumpPrintf(pData, "%-16s EMBEDDED PDV -- cb=%u TODO\n", pszName, pAsn1Core->cb); 681 break; 682 683 case ASN1_TAG_UTF8_STRING: 684 rtAsn1DumpString(pData, pAsn1Core, pszName, "UTF8 STRING", uDepth); 685 break; 686 687 case ASN1_TAG_RELATIVE_OID: 688 rtAsn1DumpPrintf(pData, "%-16s RELATIVE OBJECT IDENTIFIER -- cb=%u TODO\n", pszName, pAsn1Core->cb); 689 break; 690 691 case ASN1_TAG_SEQUENCE: 692 rtAsn1DumpPrintf(pData, "%-16s SEQUENCE -- cb=%u\n", pszName, pAsn1Core->cb); 693 fOpen = true; 694 break; 695 case ASN1_TAG_SET: 696 rtAsn1DumpPrintf(pData, "%-16s SET -- cb=%u\n", pszName, pAsn1Core->cb); 697 fOpen = true; 698 break; 699 700 case ASN1_TAG_NUMERIC_STRING: 701 rtAsn1DumpString(pData, pAsn1Core, pszName, "NUMERIC STRING", uDepth); 702 break; 703 704 case ASN1_TAG_PRINTABLE_STRING: 705 rtAsn1DumpString(pData, pAsn1Core, pszName, "PRINTABLE STRING", uDepth); 706 break; 707 708 case ASN1_TAG_T61_STRING: 709 rtAsn1DumpString(pData, pAsn1Core, pszName, "T61 STRING", uDepth); 710 break; 711 712 case ASN1_TAG_VIDEOTEX_STRING: 713 rtAsn1DumpString(pData, pAsn1Core, pszName, "VIDEOTEX STRING", uDepth); 714 break; 715 716 case ASN1_TAG_IA5_STRING: 717 rtAsn1DumpString(pData, pAsn1Core, pszName, "IA5 STRING", uDepth); 718 break; 719 720 case ASN1_TAG_GRAPHIC_STRING: 721 rtAsn1DumpString(pData, pAsn1Core, pszName, "GRAPHIC STRING", uDepth); 722 break; 723 724 case ASN1_TAG_VISIBLE_STRING: 725 rtAsn1DumpString(pData, pAsn1Core, pszName, "VISIBLE STRING", uDepth); 726 break; 727 728 case ASN1_TAG_GENERAL_STRING: 729 rtAsn1DumpString(pData, pAsn1Core, pszName, "GENERAL STRING", uDepth); 730 break; 731 732 case ASN1_TAG_UNIVERSAL_STRING: 733 rtAsn1DumpString(pData, pAsn1Core, pszName, "UNIVERSAL STRING", uDepth); 734 break; 735 736 case ASN1_TAG_BMP_STRING: 737 rtAsn1DumpString(pData, pAsn1Core, pszName, "BMP STRING", uDepth); 738 break; 739 740 case ASN1_TAG_UTC_TIME: 741 rtAsn1DumpTime(pData, pAsn1Core, pszName, "UTC TIME"); 742 break; 743 744 case ASN1_TAG_GENERALIZED_TIME: 745 rtAsn1DumpTime(pData, pAsn1Core, pszName, "GENERALIZED TIME"); 746 break; 747 748 case ASN1_TAG_CHARACTER_STRING: 749 rtAsn1DumpPrintf(pData, "%-16s CHARACTER STRING -- cb=%u TODO\n", pszName, pAsn1Core->cb); 750 break; 751 752 default: 753 rtAsn1DumpPrintf(pData, "[UNIVERSAL %u]\n", pAsn1Core->uTag); 754 break; 755 } 756 break; 760 rtAsn1DumpPrintf(pData, "%-16s ", pszName); 761 fOpen = rtAsn1DumpUniversalTypeAndValue(pData, pAsn1Core, uDepth); 762 break; 763 757 764 case ASN1_TAGCLASS_CONTEXT: 758 rtAsn1DumpPrintf(pData, "%-16s [%u]\n", pszName, pAsn1Core->uTag); 759 fOpen = true; 760 break; 765 if ((pAsn1Core->fRealClass & ASN1_TAGCLASS_MASK) == ASN1_TAGCLASS_UNIVERSAL) 766 { 767 rtAsn1DumpPrintf(pData, "%-16s [%u] ", pszName, pAsn1Core->uTag); 768 fOpen = rtAsn1DumpUniversalTypeAndValue(pData, pAsn1Core, uDepth); 769 } 770 else 771 { 772 rtAsn1DumpPrintf(pData, "%-16s [%u]\n", pszName, pAsn1Core->uTag); 773 fOpen = true; 774 } 775 break; 776 761 777 case ASN1_TAGCLASS_APPLICATION: 762 rtAsn1DumpPrintf(pData, "%-16s [APPLICATION %u]\n", pszName, pAsn1Core->uTag); 763 fOpen = true; 764 break; 778 if ((pAsn1Core->fRealClass & ASN1_TAGCLASS_MASK) == ASN1_TAGCLASS_UNIVERSAL) 779 { 780 rtAsn1DumpPrintf(pData, "%-16s [APPLICATION %u] ", pszName, pAsn1Core->uTag); 781 fOpen = rtAsn1DumpUniversalTypeAndValue(pData, pAsn1Core, uDepth); 782 } 783 else 784 { 785 rtAsn1DumpPrintf(pData, "%-16s [APPLICATION %u]\n", pszName, pAsn1Core->uTag); 786 fOpen = true; 787 } 788 break; 789 765 790 case ASN1_TAGCLASS_PRIVATE: 766 rtAsn1DumpPrintf(pData, "%-16s [PRIVATE %u]\n", pszName, pAsn1Core->uTag); 767 fOpen = true; 791 if (RTASN1CORE_IS_DUMMY(pAsn1Core)) 792 rtAsn1DumpPrintf(pData, "%-16s DUMMY\n", pszName); 793 else 794 { 795 rtAsn1DumpPrintf(pData, "%-16s [PRIVATE %u]\n", pszName, pAsn1Core->uTag); 796 fOpen = true; 797 } 768 798 break; 769 799 } -
trunk/src/VBox/Runtime/common/asn1/asn1-ut-string.cpp
r51770 r51858 1346 1346 while (cch > 0) 1347 1347 { 1348 RTUNICP uc = RT_MAKE_U32_FROM_U8( 0, 0, pb[1], pb[0]); /* big endian */1348 RTUNICP uc = RT_MAKE_U32_FROM_U8(pb[1], pb[0], 0, 0); /* big endian */ 1349 1349 if (!RTUniCpIsValid(uc)) 1350 1350 return RTErrInfoSetF(pErrInfo, VERR_ASN1_INVALID_BMP_STRING_ENCODING, … … 1544 1544 1545 1545 case ASN1_TAG_BMP_STRING: 1546 rc = RTUtf16ToUtf8Ex(pThis->Asn1Core.uData.pwc, pThis->Asn1Core.cb / sizeof(RTUTF16), 1547 (char **)&pThis->pszUtf8, cch + 1, NULL); 1548 AssertReturnStmt(RT_SUCCESS(rc), RTAsn1MemFree(&pThisNC->Allocation, psz), VERR_INTERNAL_ERROR_3); 1546 { 1547 char *pszDst = psz; 1548 size_t cchSrc = pThis->Asn1Core.cb; 1549 uint8_t const *pbSrc = (uint8_t const *)psz; 1550 while (cchSrc > 0) 1551 { 1552 RTUNICP uc = RT_MAKE_U32_FROM_U8(pbSrc[1], pbSrc[0], 0, 0); /* big endian */ 1553 AssertReturnStmt(RTUniCpIsValid(uc), RTAsn1MemFree(&pThisNC->Allocation, psz), VERR_INTERNAL_ERROR_2); 1554 pszDst = RTStrPutCp(pszDst, uc); 1555 1556 /* next */ 1557 pbSrc += 2; 1558 cchSrc -= 2; 1559 } 1560 Assert((size_t)(pszDst - psz) == cch); 1549 1561 break; 1562 } 1550 1563 1551 1564 default:
Note:
See TracChangeset
for help on using the changeset viewer.