~ubuntu-branches/ubuntu/precise/curl/precise-proposed

« back to all changes in this revision

Viewing changes to src/urlglob.c

  • Committer: Package Import Robot
  • Author(s): Timo Aaltonen
  • Date: 2011-11-25 17:30:45 UTC
  • mfrom: (3.4.23 sid)
  • Revision ID: package-import@ubuntu.com-20111125173045-2l3ni88jv16kath0
Tags: 7.22.0-3ubuntu1
* Merge from Debian unstable, remaining changes:
  - Drop dependencies not in main:
    + Build-Depends: Drop stunnel4 and libssh2-1-dev.
    + Drop libssh2-1-dev from libcurl4-openssl-dev's Depends.
  - Add new libcurl3-udeb package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
/* client-local setup.h */
24
24
#include "setup.h"
25
25
 
26
 
#include <stdio.h>
27
 
#include <stdlib.h>
28
 
#include <string.h>
29
 
#include <ctype.h>
30
26
#include <curl/curl.h>
31
27
 
32
28
#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
90
86
    case ',':
91
87
    case '}':                           /* set element completed */
92
88
      *buf = '\0';
93
 
      if(pat->content.Set.elements)
94
 
        pat->content.Set.elements =
95
 
          realloc(pat->content.Set.elements,
96
 
                  (pat->content.Set.size + 1) * sizeof(char*));
 
89
      if(pat->content.Set.elements) {
 
90
        char **new_arr = realloc(pat->content.Set.elements,
 
91
                                 (pat->content.Set.size + 1) * sizeof(char*));
 
92
        if(!new_arr) {
 
93
          short elem;
 
94
          for(elem = 0; elem < pat->content.Set.size; elem++)
 
95
            free(pat->content.Set.elements[elem]);
 
96
          free(pat->content.Set.elements);
 
97
          pat->content.Set.ptr_s = 0;
 
98
          pat->content.Set.size = 0;
 
99
        }
 
100
        pat->content.Set.elements = new_arr;
 
101
      }
97
102
      else
98
 
        pat->content.Set.elements =
99
 
          malloc((pat->content.Set.size + 1) * sizeof(char*));
 
103
        pat->content.Set.elements = malloc(sizeof(char*));
100
104
      if(!pat->content.Set.elements) {
101
105
        snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory");
102
106
        return GLOB_ERROR;
104
108
      pat->content.Set.elements[pat->content.Set.size] =
105
109
        strdup(glob->glob_buffer);
106
110
      if(!pat->content.Set.elements[pat->content.Set.size]) {
 
111
        short elem;
 
112
        for(elem = 0; elem < pat->content.Set.size; elem++)
 
113
          free(pat->content.Set.elements[elem]);
 
114
        free(pat->content.Set.elements);
 
115
        pat->content.Set.elements = NULL;
 
116
        pat->content.Set.ptr_s = 0;
 
117
        pat->content.Set.size = 0;
107
118
        snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory");
108
119
        return GLOB_ERROR;
109
120
      }
409
420
      pat = &glob->pattern[i];
410
421
      switch (pat->type) {
411
422
      case UPTSet:
412
 
        if(++pat->content.Set.ptr_s == pat->content.Set.size) {
 
423
        if((pat->content.Set.elements) &&
 
424
           (++pat->content.Set.ptr_s == pat->content.Set.size)) {
413
425
          pat->content.Set.ptr_s = 0;
414
426
          carry = TRUE;
415
427
        }
449
461
      pat = &glob->pattern[j/2];
450
462
      switch(pat->type) {
451
463
      case UPTSet:
452
 
        len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
453
 
        snprintf(buf, buflen, "%s",
454
 
                 pat->content.Set.elements[pat->content.Set.ptr_s]);
455
 
        buf += len;
456
 
        buflen -= len;
 
464
        if(pat->content.Set.elements) {
 
465
          len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
 
466
          snprintf(buf, buflen, "%s",
 
467
                   pat->content.Set.elements[pat->content.Set.ptr_s]);
 
468
          buf += len;
 
469
          buflen -= len;
 
470
        }
457
471
        break;
458
472
      case UPTCharRange:
459
473
        *buf++ = pat->content.CharRange.ptr_c;
505
519
        URLPattern pat = glob->pattern[i];
506
520
        switch (pat.type) {
507
521
        case UPTSet:
508
 
          appendthis = pat.content.Set.elements[pat.content.Set.ptr_s];
509
 
          appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]);
 
522
          if(pat.content.Set.elements) {
 
523
            appendthis = pat.content.Set.elements[pat.content.Set.ptr_s];
 
524
            appendlen =
 
525
              strlen(pat.content.Set.elements[pat.content.Set.ptr_s]);
 
526
          }
510
527
          break;
511
528
        case UPTCharRange:
512
529
          numbuf[0]=pat.content.CharRange.ptr_c;