Navigation


Changeset 387:743195485eec in freeDiameter


Ignore:
Timestamp:
Jul 6, 2010, 2:49:33 PM (14 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Additional fixes for empty octet string AVPs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfreeDiameter/messages.c

    r386 r387  
    11391139       
    11401140        /* Copy an octetstring if needed. */
    1141         if ((type == AVP_TYPE_OCTETSTRING) && (value->os.len)) {
    1142                 CHECK_MALLOC(  avp->avp_storage.os.data = malloc(value->os.len)  );
    1143                 avp->avp_mustfreeos = 1;
    1144                 memcpy(avp->avp_storage.os.data, value->os.data, value->os.len);
     1141        if (type == AVP_TYPE_OCTETSTRING) {
     1142                if (value->os.len) {
     1143                        CHECK_MALLOC(  avp->avp_storage.os.data = malloc(value->os.len)  );
     1144                        avp->avp_mustfreeos = 1;
     1145                        memcpy(avp->avp_storage.os.data, value->os.data, value->os.len);
     1146                } else {
     1147                        avp->avp_storage.os.data = NULL;
     1148                }
    11451149        }
    11461150       
     
    13341338
    13351339                        case AVP_TYPE_OCTETSTRING:
    1336                                 memcpy(&buffer[*offset], avp->avp_public.avp_value->os.data, avp->avp_public.avp_value->os.len);
     1340                                if (avp->avp_public.avp_value->os.len)
     1341                                        memcpy(&buffer[*offset], avp->avp_public.avp_value->os.data, avp->avp_public.avp_value->os.len);
    13371342                                *offset += PAD4(avp->avp_public.avp_value->os.len);
    13381343                                break;
     
    16211626                        avp->avp_rawlen = avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags );
    16221627                       
    1623                         CHECK_MALLOC(  avp->avp_rawdata = malloc(avp->avp_rawlen)  );
    1624                        
    1625                         memcpy(avp->avp_rawdata, avp->avp_source, avp->avp_rawlen);
     1628                        if (avp->avp_rawlen) {
     1629                                CHECK_MALLOC(  avp->avp_rawdata = malloc(avp->avp_rawlen)  );
     1630                       
     1631                                memcpy(avp->avp_rawdata, avp->avp_source, avp->avp_rawlen);
     1632                        }
     1633                       
    16261634                        avp->avp_source = NULL;
    16271635                       
     
    16751683                case AVP_TYPE_OCTETSTRING:
    16761684                        /* We just have to copy the string into the storage area */
    1677                         CHECK_PARAMS_DO( avp->avp_public.avp_len > GETAVPHDRSZ( avp->avp_public.avp_flags ),
     1685                        CHECK_PARAMS_DO( avp->avp_public.avp_len >= GETAVPHDRSZ( avp->avp_public.avp_flags ),
    16781686                                {
    16791687                                        if (error_info) {
     
    16841692                                } );
    16851693                        avp->avp_storage.os.len = avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags );
    1686                         CHECK_MALLOC(  avp->avp_storage.os.data = malloc(avp->avp_storage.os.len)  );
    1687                         avp->avp_mustfreeos = 1;
    1688                         memcpy(avp->avp_storage.os.data, avp->avp_source, avp->avp_storage.os.len);
     1694                        if (avp->avp_storage.os.len) {
     1695                                CHECK_MALLOC(  avp->avp_storage.os.data = malloc(avp->avp_storage.os.len)  );
     1696                                avp->avp_mustfreeos = 1;
     1697                                memcpy(avp->avp_storage.os.data, avp->avp_source, avp->avp_storage.os.len);
     1698                        } else {
     1699                                avp->avp_storage.os.data = NULL;
     1700                        }
    16891701                        break;
    16901702               
Note: See TracChangeset for help on using the changeset viewer.