Changeset 387:743195485eec in freeDiameter for libfreeDiameter/messages.c
- Timestamp:
- Jul 6, 2010, 2:49:33 PM (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfreeDiameter/messages.c
r386 r387 1139 1139 1140 1140 /* 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 } 1145 1149 } 1146 1150 … … 1334 1338 1335 1339 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); 1337 1342 *offset += PAD4(avp->avp_public.avp_value->os.len); 1338 1343 break; … … 1621 1626 avp->avp_rawlen = avp->avp_public.avp_len - GETAVPHDRSZ( avp->avp_public.avp_flags ); 1622 1627 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 1626 1634 avp->avp_source = NULL; 1627 1635 … … 1675 1683 case AVP_TYPE_OCTETSTRING: 1676 1684 /* 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 ), 1678 1686 { 1679 1687 if (error_info) { … … 1684 1692 } ); 1685 1693 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 } 1689 1701 break; 1690 1702
Note: See TracChangeset
for help on using the changeset viewer.