]> code.citadel.org Git - citadel.git/commitdiff
* Don't crash when deleting "purge this vCard" messages
authorArt Cancro <ajc@citadel.org>
Mon, 11 Feb 2002 15:52:10 +0000 (15:52 +0000)
committerArt Cancro <ajc@citadel.org>
Mon, 11 Feb 2002 15:52:10 +0000 (15:52 +0000)
citadel/ChangeLog
citadel/serv_vcard.c

index 9ec5cf61e7db11d30cccf54b056a1a6e207f05fa..dd4bee27827a9a367163853442fad5792985ef61 100644 (file)
@@ -1,4 +1,7 @@
  $Log$
+ Revision 590.108  2002/02/11 15:52:10  ajc
+ * Don't crash when deleting "purge this vCard" messages
+
  Revision 590.107  2002/02/10 22:36:41  nbryant
   - replace cdb_trunc with a complete version of the code i had been
     working on; fallback code for db < 3.3.x needed
@@ -3323,3 +3326,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import 
+
index f9853303e5dd461041c6dfd0e3bd0cf89a570401..8fdfb0efcacb2c1ae87e3fb5706740b65ec756e3 100644 (file)
@@ -672,6 +672,8 @@ int vcard_extract_from_network(struct CtdlMessage *msg, char *target_room) {
  */
 void vcard_delete_remove(char *room, long msgnum) {
        struct CtdlMessage *msg;
+       char *ptr;
+       int linelen;
 
        if (msgnum <= 0L) return;
 
@@ -680,14 +682,28 @@ void vcard_delete_remove(char *room, long msgnum) {
        }
 
        msg = CtdlFetchMessage(msgnum);
-       if (msg != NULL) {
-               vcard_extract_internet_addresses(msg, CtdlDirectoryDelUser);
+       if (msg == NULL) return;
+
+       ptr = msg->cm_fields['M'];
+       if (ptr == NULL) goto EOH;
+       while (ptr != NULL) {
+               linelen = strcspn(ptr, "\n");
+               if (linelen == 0) goto EOH;
+               
+               if (!strncasecmp(ptr, "Content-type: text/x-vcard", 26)) {
+                       /* Bingo!  A vCard is being deleted.
+                       */
+                       vcard_extract_internet_addresses(msg, CtdlDirectoryDelUser);
+               }
+               ptr = strchr((char *)ptr, '\n');
+               if (ptr != NULL) ++ptr;
        }
 
-       CtdlFreeMessage(msg);
+EOH:   CtdlFreeMessage(msg);
 }
 
 
+
 /*
  * Query Directory
  */