[PATCH] tin 1.9.x threading problem

Urs Janßen <[email protected]> Fri, 15 May 2009 14:31:55 +0200
Newsgroups gmane.network.tin.devel
Message-ID <[email protected]>
the patch below fixes a crash with references/both-threading in the newsgroup
alue.devel available on flowerpot.kaijanaho.info (in the thread starting
with Message-Id: <[email protected]> / Subject: Feature
request: get TLS and authorisation working). I'm not sure if it's the
right approach, maybe it should be fixed somewhere else - a review would be
nice.

=== modified file 'src/refs.c'
--- src/refs.c	2008-12-30 19:36:57 +0000
+++ src/refs.c	2009-05-15 11:14:03 +0000
@@ -56,7 +56,7 @@
 static struct t_msgid *add_msgid(int key, const char *msgid, struct t_msgid *newparent);
 static struct t_msgid *find_next(struct t_msgid *ptr);
 static struct t_msgid *parse_references(char *r);
-static t_bool valid_msgid(const char *msgid);
+static t_bool valid_msgid(char *msgid);
 static unsigned int hash_msgid(const char *key);
 static void add_to_parent(struct t_msgid *ptr);
 static void build_thread(struct t_msgid *ptr);
@@ -176,15 +176,16 @@
  * Checks if Message-ID has valid format
  * Returns TRUE if it does, FALSE if it does not
  *
- * TODO: combine with post.c:damaged_id()?
+ * TODO: combine with post.c:damaged_id()
  */
 static t_bool
 valid_msgid(
-	const char *msgid)
+	char *msgid)
 {
 	size_t mlen = 0;
 	t_bool at_present = 0;
 
+	str_trim(msgid);
 	if (!msgid || *msgid != '<')
 		return FALSE;
 
@@ -968,6 +969,7 @@
 	for_each_art(i) {
 		art = &arts[i];
 
+		art->refptr = add_msgid(MSGID_REF, art->msgid, NULL); /* preset art->refptr */
 		if (art->refs) {
 			strip_line(art->refs);
 
@@ -999,9 +1001,7 @@
 					art->refptr = add_msgid(MSGID_REF, art->msgid, add_msgid(REF_REF, art->refs, NULL));
 				FreeAndNull(art->refs);
 			}
-		} else
-			if (valid_msgid(art->msgid))
-				art->refptr = add_msgid(MSGID_REF, art->msgid, NULL);
+		}
 		FreeAndNull(art->msgid);	/* Now cached - discard this */
 	}