VirtualBox

Changeset 26838 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
Feb 26, 2010 12:38:30 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
58113
Message:

tstRTSystemQueryDmi.cpp: fixed the overflow tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTSystemQueryDmi.cpp

    r26608 r26838  
    5050     * Simple stuff.
    5151     */
    52     char szInfo[256];
     52    char szInfo[_4K];
    5353
    5454    rc = RTSystemQueryDmiString(RTSYSDMISTR_PRODUCT_NAME, szInfo, sizeof(szInfo));
     
    7171        memset(szInfo, ' ', sizeof(szInfo));
    7272        rc = RTSystemQueryDmiString((RTSYSDMISTR)i, szInfo, sizeof(szInfo));
    73         if (    rc == VERR_NOT_SUPPORTED
     73        if (    (rc == VERR_NOT_SUPPORTED || rc == VERR_ACCESS_DENIED)
    7474            &&  szInfo[0] != '\0')
    7575            RTTestIFailed("level=%d; unterminated buffer on VERR_NOT_SUPPORTED\n", i);
    76         else if (RT_SUCCESS(rc) || rc == VERR_BUFFER_OVERFLOW || rc == VERR_ACCESS_DENIED)
     76        else if (RT_SUCCESS(rc) || rc == VERR_BUFFER_OVERFLOW)
    7777            RTTESTI_CHECK(memchr(szInfo, '\0', sizeof(szInfo)) != NULL);
    78         else if (rc != VERR_NOT_SUPPORTED)
     78        else if (rc != VERR_NOT_SUPPORTED && rc != VERR_ACCESS_DENIED)
    7979            RTTestIFailed("level=%d unexpected rc=%Rrc\n", i, rc);
    8080    }
     
    8787    for (int i = RTSYSDMISTR_INVALID + 1; i < RTSYSDMISTR_END; i++)
    8888    {
    89         rc = VERR_BUFFER_OVERFLOW;
    90         for (size_t cch = 0; cch < sizeof(szInfo) && rc == VERR_BUFFER_OVERFLOW; cch++)
     89        RTTESTI_CHECK_RC(RTSystemQueryDmiString((RTSYSDMISTR)i, szInfo, 0), VERR_INVALID_PARAMETER);
     90
     91        /* Get the length of the info and check that we get overflow errors for
     92           everything less that it.  */
     93        rc = RTSystemQueryDmiString((RTSYSDMISTR)i, szInfo, sizeof(szInfo));
     94        if (RT_FAILURE(rc))
     95            continue;
     96        size_t const cchInfo = strlen(szInfo);
     97
     98        for (size_t cch = 1; cch < sizeof(szInfo) && cch < cchInfo; cch++)
    9199        {
    92100            memset(szInfo, 0x7f, sizeof(szInfo));
    93             rc = RTSystemQueryDmiString((RTSYSDMISTR)i, szInfo, cch);
     101            RTTESTI_CHECK_RC(RTSystemQueryDmiString((RTSYSDMISTR)i, szInfo, cch), VERR_BUFFER_OVERFLOW);
    94102
    95103            /* check the padding. */
     
    102110
    103111            /* check for zero terminator. */
    104             if (    (   rc == VERR_BUFFER_OVERFLOW
    105                      || rc == VERR_NOT_SUPPORTED
    106                      || RT_SUCCESS(rc))
    107                 &&  cch > 0
    108                 &&  !memchr(szInfo, '\0', cch))
     112            if (!memchr(szInfo, '\0', cch))
    109113                RTTestIFailed("level=%d, rc=%Rrc, cch=%zu: Buffer not terminated!\n", i, rc, cch);
    110114        }
     115
     116        /* Check that the exact length works. */
     117        rc = RTSystemQueryDmiString((RTSYSDMISTR)i, szInfo, cchInfo + 1);
     118        if (rc != VINF_SUCCESS)
     119            RTTestIFailed("level=%d: rc=%Rrc when specifying exactly right buffer length (%zu)\n", i, rc, cchInfo + 1);
    111120    }
    112121
Note: See TracChangeset for help on using the changeset viewer.

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