VirtualBox

Changeset 29845 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 27, 2010 11:29:36 AM (15 years ago)
Author:
vboxsync
Message:

tstRTCidr: nits

Location:
trunk/src/VBox/Runtime
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/misc/cidr.cpp

    r29840 r29845  
    3232#include "internal/iprt.h"
    3333
     34#include <iprt/assert.h>
    3435#include <iprt/ctype.h>
    3536#include <iprt/string.h>
     
    4445    uint32_t u32Network;
    4546    const char *psz = pszAddress;
     47    const char *pszNetmask;
    4648    char *pszNext;
    4749    int  rc = VINF_SUCCESS;
    4850    int cDelimiter = 0;
    4951    int cDelimiterLimit = 0;
    50     if (   pszAddress == NULL
    51         || pNetwork == NULL
    52         || pNetmask == NULL)
    53         return VERR_INVALID_PARAMETER;
    54     char *pszNetmask = RTStrStr(psz, "/");
     52
     53    AssertPtrReturn(pszAddress, VERR_INVALID_PARAMETER);
     54    AssertPtrReturn(pNetwork, VERR_INVALID_PARAMETER);
     55    AssertPtrReturn(pNetmask, VERR_INVALID_PARAMETER);
     56
     57    pszNetmask = RTStrStr(psz, "/");
    5558    *(uint32_t *)addr = 0;
    56     if (pszNetmask == NULL)
    57         cBits = 32; 
    58     else 
    59     { 
     59    if (!pszNetmask)
     60        cBits = 32;
     61    else
     62    {
    6063        rc = RTStrToUInt8Ex(pszNetmask + 1, &pszNext, 10, &cBits);
    61         if (   RT_FAILURE(rc) 
    62             || cBits > 32 
    63             || rc != 0) /* No trailing symbols are accptable after the digit */
     64        if (   RT_FAILURE(rc)
     65            || cBits > 32
     66            || rc != VINF_SUCCESS) /* No trailing symbols are accptable after the digit */
    6467            return VERR_INVALID_PARAMETER;
    6568    }
    6669    u32Netmask = ~(uint32_t)((1<< (32 - cBits)) - 1);
    6770
    68     rc = RTStrToUInt8Ex(psz, &pszNext, 10, &addr[0]);
    69     if (RT_FAILURE(rc))
    70         return rc;
    71 
    72     if (cBits < 9)
     71    if (cBits <= 8)
    7372        cDelimiterLimit = 0;
    7473    else if (cBits <= 16)
     
    7978        cDelimiterLimit = 3;
    8079
    81     rc = RTStrToUInt8Ex(psz, &pszNext, 10, &addr[cDelimiter]);
    82     while (RT_SUCCESS(rc))
     80    for (;;)
    8381    {
     82        rc = RTStrToUInt8Ex(psz, &pszNext, 10, &addr[cDelimiter]);
     83        if (   RT_FAILURE(rc)
     84            || rc == VWRN_NUMBER_TOO_BIG)
     85            return VERR_INVALID_PARAMETER;
     86
    8487        if (*pszNext == '.')
    8588            cDelimiter++;
    86         else if(   cDelimiter >= cDelimiterLimit
    87                 && (   *pszNext == '\0'
    88                     || *pszNext == '/'))
     89        else if (   cDelimiter >= cDelimiterLimit
     90                 && (   *pszNext == '\0'
     91                     || *pszNext == '/'))
    8992            break;
    90         else 
     93        else
    9194            return VERR_INVALID_PARAMETER;
    9295
    93         if(cDelimiter > 3)
    94             /* no more than four octets */
     96        if (cDelimiter > 3)
     97            /* not more than four octets */
    9598            return VERR_INVALID_PARAMETER;
    9699
    97         rc = RTStrToUInt8Ex(pszNext + 1, &pszNext, 10, &addr[cDelimiter]);
    98         if (rc == VWRN_NUMBER_TOO_BIG)
    99             break;
     100        psz = pszNext + 1;
    100101    }
    101     if (   RT_FAILURE(rc)
    102         || rc == VWRN_NUMBER_TOO_BIG)
    103         return VERR_INVALID_PARAMETER;
    104102    u32Network = RT_MAKE_U32_FROM_U8(addr[3], addr[2], addr[1], addr[0]);
    105     /* corner case: see rfc 790 page 2 and rfc 4632 page 6*/
    106     if (   addr[0] == 0
     103
     104    /* Corner case: see RFC 790 page 2 and RFC 4632 page 6. */
     105    if (   addr[0] == 0
    107106        && (   *(uint32_t *)addr != 0
    108107            || u32Netmask == (uint32_t)~0))
     
    111110    if ((u32Network & ~u32Netmask) != 0)
    112111        return VERR_INVALID_PARAMETER;
    113    
     112
    114113    *pNetmask = u32Netmask;
    115     *pNetwork = u32Network; 
     114    *pNetwork = u32Network;
    116115    return VINF_SUCCESS;
    117116}
  • trunk/src/VBox/Runtime/testcase/tstRTCidr.cpp

    r29841 r29845  
    7070    CHECKNETWORK("10.0.0/-45",     VERR_INVALID_PARAMETER,          0,          0);
    7171    CHECKNETWORK("10.0.0/24",                VINF_SUCCESS, 0x0A000000, 0xFFFFFF00);
     72    CHECKNETWORK("10..0.0/24",     VERR_INVALID_PARAMETER,          0,          0);
     73    CHECKNETWORK(".10.0.0/24",     VERR_INVALID_PARAMETER,          0,          0);
     74    CHECKNETWORK("10.0.0//24",     VERR_INVALID_PARAMETER,          0,          0);
    7275    CHECKNETWORK("10.0.0/8",                 VINF_SUCCESS, 0x0A000000, 0xFF000000);
    7376    CHECKNETWORK("10.0.0./24",     VERR_INVALID_PARAMETER,          0,          0);
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