Re: [evolution-patches] patch for bug #62136 (url highlighting)



no worries, mate :)

committed

On Thu, 2004-08-05 at 03:47, Not Zed wrote:
> looks good.  sorry for not getting back yesterday, it was one of those
> days.
> 
> 
> On Wed, 2004-08-04 at 14:41 -0400, Jeffrey Stedfast wrote: 
> > I've changed the code to use camel_utf8_getc_limit() so that we can
> > prevent your concerns about the handling of broken utf8 as well as
> > making sure not to go beyond the end of the buffer (which I think inptr
> > = g_utf8_find_next_char (inptr, inend); would have solved, but just in
> > case).
> > 
> > Jeff
> > 
> > On Tue, 2004-08-03 at 23:22 -0400, Jeffrey Stedfast wrote:
> > > On Tue, 2004-08-03 at 22:48, Not Zed wrote:
> > > > will that handle broken utf8 properly?  g_utf8_next_char could go off
> > > > the end of the string, or go nowhere, could it infinite loop too?
> > > 
> > > that's why the while conditional also checks inptr < inend - shouldn't
> > > that be enough? tho maybe I should use g_utf8_find_next_char() so that I
> > > can pass in the inend pointer...
> > > 
> > > can't infinite loop afaict.
> > > 
> > > Jeff
> > > 
> > > > 
> > > > On Tue, 2004-08-03 at 13:20 -0400, Jeffrey Stedfast wrote: 
> > > > > http://bugzilla.ximian.com/show_bug.cgi?id=62136
> > > > > 
> > > > > The lone '@' character in his signature was causing the problem since
> > > > > the trie_search() would return that position but the ::start() method
> > > > > would fail (it's not an email address) and so the function would
> > > > > immediately return FALSE (aka "no patterns found").
> > > > > 
> > > > > changed the code to loop until it has scanned the entire buffer it was
> > > > > given.
> > > > > 
> > > > > Jeff
> > > > > text/plain attachment (62136.patch)
> > > > > ? 24026.patch
> > > > > ? 62136.patch
> > > > > ? body
> > > > > ? body.c
> > > > > ? body.txt
> > > > > ? body2.txt
> > > > > ? charset-map.c
> > > > > ? charset-map.diff
> > > > > ? class.sh
> > > > > ? cmsutil.c
> > > > > ? date.patch
> > > > > ? flags
> > > > > ? foo
> > > > > ? foo.txt
> > > > > ? foo2.txt
> > > > > ? gw-body.txt
> > > > > ? iso
> > > > > ? iso.c
> > > > > ? lang.patch
> > > > > ? namespace.sh
> > > > > ? smime
> > > > > ? providers/imap4/reconnect.patch
> > > > > ? tests/data/camel-mime-tests.tar.gz
> > > > > Index: ChangeLog
> > > > > ===================================================================
> > > > > RCS file: /cvs/gnome/evolution/camel/ChangeLog,v
> > > > > retrieving revision 1.2234
> > > > > diff -u -r1.2234 ChangeLog
> > > > > --- ChangeLog	3 Aug 2004 16:31:47 -0000	1.2234
> > > > > +++ ChangeLog	3 Aug 2004 17:14:26 -0000
> > > > > @@ -1,5 +1,11 @@
> > > > >  2004-08-03  Jeffrey Stedfast  <fejj novell com>
> > > > >  
> > > > > +	* camel-url-scanner.c (camel_url_scanner_scan): In the case of
> > > > > +	start() or end() failing, loop starting with the first character
> > > > > +	immediately following the failed match position. Fixes bug #62136.
> > > > > +
> > > > > +2004-08-03  Jeffrey Stedfast  <fejj novell com>
> > > > > +
> > > > >  	* providers/imap4/camel-imap4-store.c (imap4_construct): Pass a
> > > > >  	reconnect func.
> > > > >  
> > > > > Index: camel-url-scanner.c
> > > > > ===================================================================
> > > > > RCS file: /cvs/gnome/evolution/camel/camel-url-scanner.c,v
> > > > > retrieving revision 1.13
> > > > > diff -u -r1.13 camel-url-scanner.c
> > > > > --- camel-url-scanner.c	28 Jun 2004 00:18:20 -0000	1.13
> > > > > +++ camel-url-scanner.c	3 Aug 2004 17:14:26 -0000
> > > > > @@ -76,29 +76,33 @@
> > > > >  gboolean
> > > > >  camel_url_scanner_scan (CamelUrlScanner *scanner, const char *in, size_t inlen, urlmatch_t *match)
> > > > >  {
> > > > > -	const char *pos, *inend;
> > > > > +	const char *pos, *inptr, *inend;
> > > > >  	urlpattern_t *pat;
> > > > >  	int pattern;
> > > > >  	
> > > > >  	g_return_val_if_fail (scanner != NULL, FALSE);
> > > > >  	g_return_val_if_fail (in != NULL, FALSE);
> > > > >  	
> > > > > -	if (!(pos = e_trie_search (scanner->trie, in, inlen, &pattern)))
> > > > > -		return FALSE;
> > > > > -	
> > > > > -	pat = g_ptr_array_index (scanner->patterns, pattern);
> > > > > -	
> > > > > -	match->pattern = pat->pattern;
> > > > > -	match->prefix = pat->prefix;
> > > > > -	
> > > > > +	inptr = in;
> > > > >  	inend = in + inlen;
> > > > > -	if (!pat->start (in, pos, inend, match))
> > > > > -		return FALSE;
> > > > >  	
> > > > > -	if (!pat->end (in, pos, inend, match))
> > > > > -		return FALSE;
> > > > > +	do {
> > > > > +		if (!(pos = e_trie_search (scanner->trie, inptr, inlen, &pattern)))
> > > > > +			return FALSE;
> > > > > +		
> > > > > +		pat = g_ptr_array_index (scanner->patterns, pattern);
> > > > > +		
> > > > > +		match->pattern = pat->pattern;
> > > > > +		match->prefix = pat->prefix;
> > > > > +		
> > > > > +		if (pat->start (in, pos, inend, match) && pat->end (in, pos, inend, match))
> > > > > +			return TRUE;
> > > > > +		
> > > > > +		inptr = g_utf8_next_char (pos);
> > > > > +		inlen = inend - inptr;
> > > > > +	} while (inptr != NULL && inptr < inend);
> > > > >  	
> > > > > -	return TRUE;
> > > > > +	return FALSE;
> > > > >  }
> > > > >  
> > > > > 
> > > > -- 
> > > > 
> > > > Michael Zucchi <notzed ximian com>
> > > > "born to die, live to work, it's
> > > > all downhill from here"
> > > > Novell's Evolution and Free
> > > > Software Developer
> > > 
> > > _______________________________________________
> > > evolution-patches mailing list
> > > evolution-patches lists ximian com
> > > http://lists.ximian.com/mailman/listinfo/evolution-patches
> > > 
> > text/plain attachment (62136.patch)
> > Index: ChangeLog
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/camel/ChangeLog,v
> > retrieving revision 1.2234
> > diff -u -r1.2234 ChangeLog
> > --- ChangeLog	3 Aug 2004 16:31:47 -0000	1.2234
> > +++ ChangeLog	4 Aug 2004 18:41:33 -0000
> > @@ -1,5 +1,11 @@
> >  2004-08-03  Jeffrey Stedfast  <fejj novell com>
> >  
> > +	* camel-url-scanner.c (camel_url_scanner_scan): In the case of
> > +	start() or end() failing, loop starting with the first character
> > +	immediately following the failed match position. Fixes bug #62136.
> > +
> > +2004-08-03  Jeffrey Stedfast  <fejj novell com>
> > +
> >  	* providers/imap4/camel-imap4-store.c (imap4_construct): Pass a
> >  	reconnect func.
> >  
> > Index: camel-url-scanner.c
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/camel/camel-url-scanner.c,v
> > retrieving revision 1.13
> > diff -u -r1.13 camel-url-scanner.c
> > --- camel-url-scanner.c	28 Jun 2004 00:18:20 -0000	1.13
> > +++ camel-url-scanner.c	4 Aug 2004 18:41:33 -0000
> > @@ -30,6 +30,7 @@
> >  #include <ctype.h>
> >  
> >  #include "e-util/e-trie.h"
> > +#include "camel-utf8.h"
> >  #include "camel-url-scanner.h"
> >  
> > 
> > @@ -76,29 +77,36 @@
> >  gboolean
> >  camel_url_scanner_scan (CamelUrlScanner *scanner, const char *in, size_t inlen, urlmatch_t *match)
> >  {
> > -	const char *pos, *inend;
> > +	const char *pos, *inptr, *inend;
> >  	urlpattern_t *pat;
> >  	int pattern;
> >  	
> >  	g_return_val_if_fail (scanner != NULL, FALSE);
> >  	g_return_val_if_fail (in != NULL, FALSE);
> >  	
> > -	if (!(pos = e_trie_search (scanner->trie, in, inlen, &pattern)))
> > -		return FALSE;
> > -	
> > -	pat = g_ptr_array_index (scanner->patterns, pattern);
> > -	
> > -	match->pattern = pat->pattern;
> > -	match->prefix = pat->prefix;
> > -	
> > +	inptr = in;
> >  	inend = in + inlen;
> > -	if (!pat->start (in, pos, inend, match))
> > -		return FALSE;
> >  	
> > -	if (!pat->end (in, pos, inend, match))
> > -		return FALSE;
> > +	do {
> > +		if (!(pos = e_trie_search (scanner->trie, inptr, inlen, &pattern)))
> > +			return FALSE;
> > +		
> > +		pat = g_ptr_array_index (scanner->patterns, pattern);
> > +		
> > +		match->pattern = pat->pattern;
> > +		match->prefix = pat->prefix;
> > +		
> > +		if (pat->start (in, pos, inend, match) && pat->end (in, pos, inend, match))
> > +			return TRUE;
> > +		
> > +		inptr = pos;
> > +		if (camel_utf8_getc_limit ((const unsigned char **) &inptr, inend) == 0xffff)
> > +			break;
> > +		
> > +		inlen = inend - inptr;
> > +	} while (inptr < inend);
> >  	
> > -	return TRUE;
> > +	return FALSE;
> >  }
> >  
> > 
> -- 
> 
> Michael Zucchi <notzed ximian com>
> "born to die, live to work, it's
> all downhill from here"
> Novell's Evolution and Free
> Software Developer




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