Diff for /libaitwww/src/mime.c between versions 1.1.1.1.2.2 and 1.1.1.1.2.4

version 1.1.1.1.2.2, 2012/03/09 15:34:37 version 1.1.1.1.2.4, 2012/03/10 00:26:04
Line 169  hdrValue(const char *str, size_t len, const char **end Line 169  hdrValue(const char *str, size_t len, const char **end
   
         e = str + len;          e = str + len;
         while (str < e) {          while (str < e) {
                if ((crlf = findtextpos(str, e - str, CRLF, strlen(CRLF)))) {                if (!(crlf = findtextpos(str, e - str, CRLF, strlen(CRLF)))) {
                        www_SetErr(EBADMSG, "Bad MIME format message");                        www_SetErr(EBADMSG, "Bad header format of MIME part");
                         return NULL;                          return NULL;
                 }                  }
   
Line 328  mime_parseMultiPart(const char *str, size_t len, const Line 328  mime_parseMultiPart(const char *str, size_t len, const
         mime_t *mime = NULL;          mime_t *mime = NULL;
         struct iovec bd[2];          struct iovec bd[2];
         struct tagMIME *m, *old = NULL;          struct tagMIME *m, *old = NULL;
        const char *next;        const char *next = NULL;
   
         if (!str | !bdtag) {          if (!str | !bdtag) {
                 www_SetErr(EINVAL, "String or boundary tag is NULL");                  www_SetErr(EINVAL, "String or boundary tag is NULL");
Line 372  mime_parseMultiPart(const char *str, size_t len, const Line 372  mime_parseMultiPart(const char *str, size_t len, const
                 len -= strlen(strstr(bd[0].iov_base, "--"));                  len -= strlen(strstr(bd[0].iov_base, "--"));
         }          }
   
        while (42) {        while (len > 0) {
                 m = malloc(sizeof(struct tagMIME));                  m = malloc(sizeof(struct tagMIME));
                 if (!m) {                  if (!m) {
                         LOGERR;                          LOGERR;
Line 420  mime_parseMultiPart(const char *str, size_t len, const Line 420  mime_parseMultiPart(const char *str, size_t len, const
         len -= bd[0].iov_len;          len -= bd[0].iov_len;
         */          */
   
           free(bd[1].iov_base);
           free(bd[0].iov_base);
   
         if (end)          if (end)
                 *end = str;                  *end = str;
         return mime;          return mime;
Line 584  mime_readPart(struct tagMIME * __restrict m, const cha Line 587  mime_readPart(struct tagMIME * __restrict m, const cha
         if (!ct || www_cmptype(ct, "multipart")) {          if (!ct || www_cmptype(ct, "multipart")) {
                 /* not multi part, assign like body element */                  /* not multi part, assign like body element */
                 m->mime_body.iov_base = malloc(len - (eoh - str) + 1);                  m->mime_body.iov_base = malloc(len - (eoh - str) + 1);
                   if (!m->mime_body.iov_base) {
                           LOGERR;
                           freeHeader(m);
                           return -1;
                   }
                 memcpy(m->mime_body.iov_base, eoh, len - (eoh - str));                  memcpy(m->mime_body.iov_base, eoh, len - (eoh - str));
                 ((char*) m->mime_body.iov_base)[len - (eoh - str)] = 0;                  ((char*) m->mime_body.iov_base)[len - (eoh - str)] = 0;
                 m->mime_body.iov_len = len - (eoh - str) + 1;                  m->mime_body.iov_len = len - (eoh - str) + 1;
         } else {          } else {
                 /* multi part */                  /* multi part */
                 attr = www_parseAttributes(&ct);                  attr = www_parseAttributes(&ct);
                if (!attr)                if (!attr) {
                         freeHeader(m);
                         return -1;                          return -1;
                   }
                 bd.iov_base = bd_begin(www_getAttribute(attr, "boundary"));                  bd.iov_base = bd_begin(www_getAttribute(attr, "boundary"));
                 bd.iov_len = strlen(bd.iov_base);                  bd.iov_len = strlen(bd.iov_base);
                 eb = findtextpos(eoh, len - (eoh - str), bd.iov_base, bd.iov_len);                  eb = findtextpos(eoh, len - (eoh - str), bd.iov_base, bd.iov_len);
Line 603  mime_readPart(struct tagMIME * __restrict m, const cha Line 613  mime_readPart(struct tagMIME * __restrict m, const cha
                         if (!m->mime_prolog.iov_base) {                          if (!m->mime_prolog.iov_base) {
                                 LOGERR;                                  LOGERR;
                                 www_freeAttributes(&attr);                                  www_freeAttributes(&attr);
                                   freeHeader(m);
                                 return -1;                                  return -1;
                         }                          }
                         memcpy(m->mime_prolog.iov_base, eoh, eb - eoh);                          memcpy(m->mime_prolog.iov_base, eoh, eb - eoh);
Line 619  mime_readPart(struct tagMIME * __restrict m, const cha Line 630  mime_readPart(struct tagMIME * __restrict m, const cha
                         if (!m->mime_epilog.iov_base) {                          if (!m->mime_epilog.iov_base) {
                                 LOGERR;                                  LOGERR;
                                 www_freeAttributes(&attr);                                  www_freeAttributes(&attr);
                                   freeHeader(m);
                                 return -1;                                  return -1;
                         }                          }
                         memcpy(m->mime_epilog.iov_base, str, len - (eoh - str));                          memcpy(m->mime_epilog.iov_base, str, len - (eoh - str));
Line 626  mime_readPart(struct tagMIME * __restrict m, const cha Line 638  mime_readPart(struct tagMIME * __restrict m, const cha
                         m->mime_epilog.iov_len = len - (eoh - str) + 1;                          m->mime_epilog.iov_len = len - (eoh - str) + 1;
   
                 }                  }
   
                   www_freeAttributes(&attr);
         }          }
   
         www_freeAttributes(&attr);  
         return 0;          return 0;
 }  }
   

Removed from v.1.1.1.1.2.2  
changed lines
  Added in v.1.1.1.1.2.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>