VirtualBox

Changeset 66768 in vbox for trunk/src/VBox/Runtime/common


Ignore:
Timestamp:
May 4, 2017 12:59:27 AM (8 years ago)
Author:
vboxsync
Message:

iso9660: build fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/fs/iso9660vfs.cpp

    r66767 r66768  
    794794    uint32_t        offEntryInDir   = 0;
    795795    uint32_t const  cbDir           = pThis->Core.cbObject;
    796     while (offEntryInDir + RT_OFFSETOF(ISO9660DIRREC, achFileId) <= cbDir)
     796    while (offEntryInDir + RT_UOFFSETOF(ISO9660DIRREC, achFileId) <= cbDir)
    797797    {
    798798        PCISO9660DIRREC pDirRec = (PCISO9660DIRREC)&pThis->pbDir[offEntryInDir];
     
    12231223                && pDirRec->achFileId[0]  == '\0')
    12241224            {
    1225                 if (*pcbDirEntry < RT_OFFSETOF(RTDIRENTRYEX, szName) + 2)
     1225                if (*pcbDirEntry < RT_UOFFSETOF(RTDIRENTRYEX, szName) + 2)
    12261226                {
    1227                     *pcbDirEntry = RT_OFFSETOF(RTDIRENTRYEX, szName) + 2;
     1227                    *pcbDirEntry = RT_UOFFSETOF(RTDIRENTRYEX, szName) + 2;
    12281228                    return VERR_BUFFER_OVERFLOW;
    12291229                }
     
    12331233            }
    12341234            else if (   pDirRec->bFileIdLength == 1
    1235                      && pDirRec->achFileId[0]  == '\0')
     1235                     && pDirRec->achFileId[0]  == '\1')
    12361236            {
    1237                 if (*pcbDirEntry < RT_OFFSETOF(RTDIRENTRYEX, szName) + 3)
     1237                if (*pcbDirEntry < RT_UOFFSETOF(RTDIRENTRYEX, szName) + 3)
    12381238                {
    1239                     *pcbDirEntry = RT_OFFSETOF(RTDIRENTRYEX, szName) + 3;
     1239                    *pcbDirEntry = RT_UOFFSETOF(RTDIRENTRYEX, szName) + 3;
    12401240                    return VERR_BUFFER_OVERFLOW;
    12411241                }
     
    12501250                PCRTUTF16 pwcSrc    = (PCRTUTF16)&pDirRec->achFileId[0];
    12511251                PCRTUTF16 pwcSrcEnd = &pwcSrc[pDirRec->bFileIdLength / sizeof(RTUTF16)];
    1252                 size_t    cbDst     = *pcbDirEntry - RT_OFFSETOF(RTDIRENTRYEX, szName);
    1253                 char     *pszDst    = pDirEntry->szName;
     1252                size_t    cbDst     = *pcbDirEntry - RT_UOFFSETOF(RTDIRENTRYEX, szName);
     1253                size_t    offDst    = 0;
    12541254                while ((uintptr_t)pwcSrc < (uintptr_t)pwcSrcEnd)
    12551255                {
     
    12581258                    if (RT_FAILURE(rc))
    12591259                        uc = '?';
     1260                    else if (!uc)
     1261                        break;
    12601262                    size_t cchCp = RTStrCpSize(uc);
    1261                     if (cchCp < cbDst)
     1263                    if (offDst + cchCp < cbDst)
    12621264                    {
    1263                         cbDst -= cchCp;
    1264                         pszDst = RTStrPutCp(pszDst, uc);
     1265                        RTStrPutCp(&pDirEntry->szName[offDst], uc);
     1266                        offDst += cchCp;
    12651267                    }
    12661268                    else
    12671269                    {
    12681270                        /* Buffer overflow.  Figure out how much we really need. */
    1269                         size_t off = pszDst - &pDirEntry->szName[0];
    1270                         off += cchCp;
     1271                        offDst += cchCp;
    12711272                        while ((uintptr_t)pwcSrc < (uintptr_t)pwcSrcEnd)
    12721273                        {
    12731274                            RTUtf16BigGetCpEx(&pwcSrc, &uc);
    1274                             off += RTStrCpSize(uc);
     1275                            offDst += RTStrCpSize(uc);
    12751276                        }
    1276                         *pcbDirEntry = RT_OFFSETOF(RTDIRENTRYEX, szName) + off + 1;
     1277                        *pcbDirEntry = RT_UOFFSETOF(RTDIRENTRYEX, szName) + offDst + 1;
    12771278                        return VERR_BUFFER_OVERFLOW;
    12781279                    }
    12791280                }
    1280                 *pszDst = '\0';
     1281                pDirEntry->szName[offDst] = '\0';
     1282                pDirEntry->cbName = (uint16_t)offDst;
    12811283            }
    12821284            else
    12831285            {
    12841286                /* This is supposed to be upper case ASCII, however, purge the encoding anyway. */
    1285                 size_t cbNeeded = RT_OFFSETOF(RTDIRENTRYEX, szName) + pDirRec->bFileIdLength + 1;
     1287                size_t cbNeeded = RT_UOFFSETOF(RTDIRENTRYEX, szName) + pDirRec->bFileIdLength + 1;
    12861288                if (*pcbDirEntry < cbNeeded)
    12871289                {
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