Changeset 228 for branches/samba-3.2.x/source/lib/charcnv.c
- Timestamp:
- May 26, 2009, 9:44:50 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/samba-3.2.x/source/lib/charcnv.c
r149 r228 1184 1184 *ppdest = NULL; 1185 1185 1186 if (!src_len) { 1187 return 0; 1188 } 1189 1186 1190 if (flags & STR_TERMINATE) { 1187 1191 if (src_len == (size_t)-1) { … … 1201 1205 smb_panic(msg); 1202 1206 } 1203 } 1207 } else { 1208 /* Can't have an unlimited length 1209 * non STR_TERMINATE'd. 1210 */ 1211 if (src_len == (size_t)-1) { 1212 errno = EINVAL; 1213 return 0; 1214 } 1215 } 1216 1217 /* src_len != -1 here. */ 1204 1218 1205 1219 if (!convert_string_allocate(ctx, CH_DOS, CH_UNIX, src, src_len, &dest, 1206 &dest_len, True)) 1220 &dest_len, True)) { 1207 1221 dest_len = 0; 1222 } 1208 1223 1209 1224 if (dest_len && dest) { 1210 1225 /* Did we already process the terminating zero ? */ 1211 1226 if (dest[dest_len-1] != 0) { 1212 dest[dest_len-1] = 0; 1227 size_t size = talloc_get_size(dest); 1228 /* Have we got space to append the '\0' ? */ 1229 if (size <= dest_len) { 1230 /* No, realloc. */ 1231 dest = TALLOC_REALLOC_ARRAY(ctx, dest, char, 1232 dest_len+1); 1233 if (!dest) { 1234 /* talloc fail. */ 1235 dest_len = (size_t)-1; 1236 return 0; 1237 } 1238 } 1239 /* Yay - space ! */ 1240 dest[dest_len] = '\0'; 1241 dest_len++; 1213 1242 } 1214 1243 } else if (dest) { … … 1558 1587 smb_panic("Bad src length in pull_ucs2_base_talloc\n"); 1559 1588 } 1560 } 1589 } else { 1590 /* Can't have an unlimited length 1591 * non STR_TERMINATE'd. 1592 */ 1593 if (src_len == (size_t)-1) { 1594 errno = EINVAL; 1595 return 0; 1596 } 1597 } 1598 1599 /* src_len != -1 here. */ 1561 1600 1562 1601 /* ucs2 is always a multiple of 2 bytes */ 1563 if (src_len != (size_t)-1) { 1564 src_len &= ~1; 1565 } 1602 src_len &= ~1; 1566 1603 1567 1604 dest_len = convert_string_talloc(ctx, … … 1575 1612 dest_len = 0; 1576 1613 } 1577 1578 if (src_len == (size_t)-1)1579 src_len = dest_len*2;1580 1614 1581 1615 if (dest_len) {
Note:
See TracChangeset
for help on using the changeset viewer.