VirtualBox

Ignore:
Timestamp:
Oct 7, 2018 6:28:21 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
125548
Message:

IPRT/ldr: Working on parsing Mach-O code signing structures... bugref:9232

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/asn1/asn1-cursor.cpp

    r73662 r74656  
    314314            /* Indefinite form. */
    315315            else if (pCursor->fFlags & RTASN1CURSOR_FLAGS_DER)
    316                 return RTAsn1CursorSetInfo(pCursor, VERR_ASN1_CURSOR_ILLEGAL_IDEFINITE_LENGTH,
     316                return RTAsn1CursorSetInfo(pCursor, VERR_ASN1_CURSOR_ILLEGAL_INDEFINITE_LENGTH,
    317317                                           "%s: Indefinite length form not allowed in DER mode (uTag=%#x).", pszErrorTag, uTag);
     318            else if (pCursor->cbLeft < 2)
     319                return RTAsn1CursorSetInfo(pCursor, VERR_ASN1_CURSOR_BAD_INDEFINITE_LENGTH,
     320                                           "%s: Too little data left for indefinite BER/CER encoding (uTag=%#x)", pszErrorTag, uTag);
    318321            else
    319                 return RTAsn1CursorSetInfo(pCursor, VERR_ASN1_CURSOR_IDEFINITE_LENGTH_NOT_SUP,
    320                                            "%s: Indefinite BER/CER length not supported (uTag=%#x)", pszErrorTag, uTag);
     322            {
     323                /* Search forward till we find the two terminating zero bytes. */
     324                cb = 0;
     325                for (;;)
     326                {
     327                    uint8_t const *pb = (uint8_t const *)memchr(&pCursor->pbCur[cb], 0x00, pCursor->cbLeft - cb - 1);
     328                    if (pb && pb[1] == 0x00)
     329                    {
     330                        cb = &pb[2] - pCursor->pbCur;
     331                        break;
     332                    }
     333                    if (!pb)
     334                        return RTAsn1CursorSetInfo(pCursor, VERR_ASN1_CURSOR_BAD_INDEFINITE_LENGTH,
     335                                                   "%s: Could not find end of indefinite BER/CER record (uTag=%#x)", pszErrorTag, uTag);
     336                    cb = &pb[1] - pCursor->pbCur;
     337                }
     338            }
    321339        }
    322340
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette