Ignore:
Timestamp:
May 26, 2009, 9:44:50 AM (16 years ago)
Author:
Herwig Bauernfeind
Message:

Update 3.2 branch to 3.2.6

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.2.x/source/lib/charcnv.c

    r149 r228  
    11841184        *ppdest = NULL;
    11851185
     1186        if (!src_len) {
     1187                return 0;
     1188        }
     1189
    11861190        if (flags & STR_TERMINATE) {
    11871191                if (src_len == (size_t)-1) {
     
    12011205                        smb_panic(msg);
    12021206                }
    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. */
    12041218
    12051219        if (!convert_string_allocate(ctx, CH_DOS, CH_UNIX, src, src_len, &dest,
    1206                 &dest_len, True))
     1220                &dest_len, True)) {
    12071221                dest_len = 0;
     1222        }
    12081223
    12091224        if (dest_len && dest) {
    12101225                /* Did we already process the terminating zero ? */
    12111226                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++;
    12131242                }
    12141243        } else if (dest) {
     
    15581587                        smb_panic("Bad src length in pull_ucs2_base_talloc\n");
    15591588                }
    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. */
    15611600
    15621601        /* ucs2 is always a multiple of 2 bytes */
    1563         if (src_len != (size_t)-1) {
    1564                 src_len &= ~1;
    1565         }
     1602        src_len &= ~1;
    15661603
    15671604        dest_len = convert_string_talloc(ctx,
     
    15751612                dest_len = 0;
    15761613        }
    1577 
    1578         if (src_len == (size_t)-1)
    1579                 src_len = dest_len*2;
    15801614
    15811615        if (dest_len) {
Note: See TracChangeset for help on using the changeset viewer.