Re: [evolution-patches] 41163, pgp attachment problem



Just tested verifying a few of Ettore's signatures on various lists as
well as sending myself a test signed message with and without an
attachment (just in case would make a difference). Everything seems to
be working fine, and the patch looks good to me...

Jeff

On Wed, 2003-04-16 at 14:30, Not Zed wrote:
> The multipart-signed code was assuming the end of line character was
> only 1 character long.
> 
> in the test case eol's were \r\n so it was adding a blank line to the
> start of the part, which got decoded as end of headers, so the content
> was treated as text/plain.
> 
>  Z
> 
> 
> ______________________________________________________________________
> ? 19564.diff
> ? a
> ? a.out
> ? buildtable
> ? c.diff
> ? camel-f.c
> ? camel-object-bag.c
> ? camel-service.2.c
> ? camel-smime.c
> ? camel-smime.h
> ? camel-stream-ssl.c
> ? camel-stream-ssl.h
> ? cvf.c
> ? diff
> ? filter.diff
> ? log
> ? merged.msg
> ? mt.diff
> ? mylock
> ? new
> ? old
> ? out.ps
> ? outbox
> ? race.txt
> ? search.txt
> ? test-from.c
> ? test.c
> ? trace
> ? trash.diff
> ? typescript
> ? vfolder.txt
> ? vfolders.xml
> ? providers/cache
> ? providers/file
> ? providers/local/camel-mbox-provider.c
> ? providers/local/swummary.txt
> ? providers/mbox/Makefile
> ? providers/mbox/Makefile.in
> ? providers/mbox/an
> ? providers/mh/Makefile
> ? providers/mh/Makefile.in
> ? providers/vee/Makefile
> ? providers/vee/Makefile.in
> ? providers/vee/camel-vee-folder.c.save
> ? providers/vee/camel-vee-folder.c.save2
> ? providers/vee/diff
> ? providers/vee/libcamelvee.urls
> ? tests/a.out
> ? tests/test.c
> ? tests/data/addr.txt
> ? tests/data/bg_BG.cp1251.windows-1251.txt
> ? tests/data/ca.iso-8859-1.txt
> ? tests/data/cs.ISO-8859-2.txt
> ? tests/data/da.ISO-8859-1.txt
> ? tests/data/de.ISO-8859-1.txt
> ? tests/data/el.iso-8859-7.txt
> ? tests/data/en_GB.iso-8859-1.txt
> ? tests/data/es.iso-8859-1.txt
> ? tests/data/et.iso-8859-1.txt
> ? tests/data/eu.iso-8859-1.txt
> ? tests/data/fi.iso-8859-15.txt
> ? tests/data/fr.ISO-8859-1.txt
> ? tests/data/ga.iso-8859-1.txt
> ? tests/data/gl.iso-8859-1.txt
> ? tests/data/hu.iso-8859-2.txt
> ? tests/data/it.iso-8859-1.txt
> ? tests/data/ja.euc-jp.txt
> ? tests/data/ko.euc-kr.txt
> ? tests/data/lt.iso-8859-13.txt
> ? tests/data/nl.iso-8859-1.txt
> ? tests/data/no.iso-8859-1.txt
> ? tests/data/pl.iso-8859-2.txt
> ? tests/data/pt.iso-8859-1.txt
> ? tests/data/pt_BR.iso-8859-1.txt
> ? tests/data/ru.koi8-r.txt
> ? tests/data/sk.iso-8859-2.txt
> ? tests/data/sl.iso-8859-2.txt
> ? tests/data/sp.iso-8859-5.txt
> ? tests/data/sr.iso-8859-2.txt
> ? tests/data/sv.iso-8859-1.txt
> ? tests/data/ta.TSCII.txt
> ? tests/data/test-lines.h
> ? tests/data/tr.iso-8859-9.txt
> ? tests/data/uk.koi8-u.txt
> ? tests/data/wa.iso-8859-1.txt
> ? tests/data/zh_CN.GB2312.gb2312.txt
> ? tests/data/zh_TW.Big5.big5.txt
> ? tests/folder/trace
> ? tests/message/uni.txt
> ? tests/mime-filter/test-html.c
> ? tests/stream/readwrite.c
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution/camel/ChangeLog,v
> retrieving revision 1.1794
> diff -u -3 -r1.1794 ChangeLog
> --- ChangeLog	10 Apr 2003 17:13:13 -0000	1.1794
> +++ ChangeLog	17 Apr 2003 01:55:20 -0000
> @@ -1,3 +1,10 @@
> +2003-04-17  Not Zed  <NotZed Ximian com>
> +
> +	* camel-multipart-signed.c (parse_content): Dont assume adding 1
> +	to line length will go to the next line.  e.g. for dos lines that
> +	end in \r\n.  Fix for #41163.
> +	(parse_boundary): util function to help above.
> +
>  2003-04-10  Jeffrey Stedfast  <fejj ximian com>
>  
>  	* providers/smtp/camel-smtp-transport.c: Turn off debugging if
> Index: camel-mime-part-utils.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/camel/camel-mime-part-utils.c,v
> retrieving revision 1.86
> diff -u -3 -r1.86 camel-mime-part-utils.c
> --- camel-mime-part-utils.c	27 Mar 2003 06:05:46 -0000	1.86
> +++ camel-mime-part-utils.c	17 Apr 2003 01:55:26 -0000
> @@ -422,7 +422,7 @@
>  	CamelContentType *ct;
>  	
>  	ct = camel_mime_parser_content_type (mp);
> -	
> +
>  	switch (camel_mime_parser_state (mp)) {
>  	case HSCAN_HEADER:
>  		d(printf("Creating body part\n"));
> Index: camel-multipart-signed.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/camel/camel-multipart-signed.c,v
> retrieving revision 1.7
> diff -u -3 -r1.7 camel-multipart-signed.c
> --- camel-multipart-signed.c	27 Feb 2003 04:53:03 -0000	1.7
> +++ camel-multipart-signed.c	17 Apr 2003 01:55:28 -0000
> @@ -50,7 +50,8 @@
>  #include "camel-mime-filter-crlf.h"
>  #include "camel-mime-filter-canon.h"
>  
> -#define d(x)
> +#define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))
> +	       #include <stdio.h>;*/
>  
>  static void signed_add_part(CamelMultipart *multipart, CamelMimePart *part);
>  static void signed_add_part_at(CamelMultipart *multipart, CamelMimePart *part, guint index);
> @@ -179,6 +180,30 @@
>  	return multipart;
>  }
>  
> +/* find the next boundary @bound from @start, return the start of the actual data
> +   @end points to the end of the data BEFORE the boundary */
> +static char *parse_boundary(char *start, const char *bound, char **end)
> +{
> +	char *data, *begin;
> +
> +	begin = strstr(start, bound);
> +	if (begin == NULL)
> +		return NULL;
> +
> +	data = begin+strlen(bound);
> +	if (begin > start && begin[-1] == '\n')
> +		begin--;
> +	if (begin > start && begin[-1] == '\r')
> +		begin--;
> +	if (data[0] == '\r')
> +		data++;
> +	if (data[0] == '\n')
> +		data++;
> +
> +	*end = begin;
> +	return data;
> +}
> +
>  /* yeah yuck.
>     Well, we could probably use the normal mime parser, but then it would change our
>     headers.
> @@ -187,7 +212,7 @@
>  parse_content(CamelMultipartSigned *mps)
>  {
>  	CamelMultipart *mp = (CamelMultipart *)mps;
> -	char *start, *end, *start2, *end2, *last;
> +	char *start, *end, *start2, *end2, *last, *post;
>  	CamelStreamMem *mem;
>  	char *bound;
>  	const char *boundary;
> @@ -213,44 +238,32 @@
>  	bound = alloca(strlen(boundary)+5);
>  	sprintf(bound, "--%s", boundary);
>  
> -	start = strstr(mem->buffer->data, bound);
> -	if (start == NULL) {
> -		printf("construct from stream, cannot find first boundary\n");
> +	start = parse_boundary(mem->buffer->data, bound, &end);
> +	if (start == NULL || start[0] == 0)
>  		return -1;
> -	}
>  
> -	if (start > (char *)mem->buffer->data) {
> +	if (end > (char *)mem->buffer->data) {
>  		char *tmp = g_strndup(mem->buffer->data, start-(char *)mem->buffer->data-1);
>  		camel_multipart_set_preface(mp, tmp);
>  		g_free(tmp);
>  	}
>  
> -	start += strlen(bound)+1;
> -	if (start >= last)
> +	start2 = parse_boundary(start, bound, &end);
> +	if (start2 == NULL || start2[0] == 0)
>  		return -1;
> -	end = strstr(start, bound);
> -	if (end == NULL) {
> -		printf("construct from stream, cannot find second boundary\n");
> -		return -1;
> -	}
>  
> -	start2 = end + strlen(bound)+1;
> -	if (start2 >= last)
> -		return -1;
>  	sprintf(bound, "--%s--", boundary);
> -	end2 = strstr(start2, bound);
> -	if (end2 == NULL) {
> -		printf("construct from stream, cannot find last boundary\n");
> +	post = parse_boundary(start2, bound, &end2);
> +	if (post == NULL)
>  		return -1;
> -	}
>  
> -	if (end2+strlen(bound)+1 < last)
> -		camel_multipart_set_postface(mp, end2+strlen(bound)+1);
> +	if (post[0])
> +		camel_multipart_set_postface(mp, post);
>  
>  	mps->start1 = start-(char *)mem->buffer->data;
> -	mps->end1 = end-(char *)mem->buffer->data-1;
> +	mps->end1 = end-(char *)mem->buffer->data;
>  	mps->start2 = start2-(char *)mem->buffer->data;
> -	mps->end2 = end2-(char *)mem->buffer->data-1;
> +	mps->end2 = end2-(char *)mem->buffer->data;
>  
>  	return 0;
>  }
-- 
Jeffrey Stedfast
Evolution Hacker - Ximian, Inc.
fejj ximian com  - www.ximian.com




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]