Index: QUICK/hdrs/patchlevel.h
*** elm2.4.ME+.31/hdrs/patchlevel.h	Thu Jan  9 18:17:32 1997
--- QUICK/hdrs/patchlevel.h	Thu Apr 10 21:39:29 1997
***************
*** 1,2 ****
! #define PATCHLEVEL "31 (25)"
  
--- 1,2 ----
! #define PATCHLEVEL "31H (25)"
  
Index: QUICK/README.ME+
*** elm2.4.ME+.31/README.ME+	Thu Jan  9 18:17:32 1997
--- QUICK/README.ME+	Thu Apr 10 22:00:41 1997
***************
*** 11,16 ****
--- 11,30 ----
  Version Elm2.4 PL24 ME8b is based to version Elm2.4 PL24.
  Version Elm2.4ME+ PLx (25) includes patch of version Elm2.4 PL25.
  
+ Changes of Elm2.4ME+ PL31H (25) compared to Elm2.4ME+ PL31 (25)
+ ---------------------------------------------------------------
+ 
+ 	[ This is out of branch patch. ]
+ 
+ 	- Incorrect Content-length: -header was causing corruption
+ 	  of folders.
+           From: Guy Harris <guy@netapp.com>
+ 
+ 	- argv_from_to was not handled ',' in comments correctly.
+ 	  Detected from report of Gary Casterline 
+ 		<casterln@nature.Berkeley.EDU>
+ 	> Use rfc822_toklen instead of len_next_part
+ 
  Changes of Elm2.4ME+ PL31 (25) compared to Elm2.4ME+ PL30 (25)
  --------------------------------------------------------------
  
Index: QUICK/hdrs/defs.h
*** elm2.4.ME+.31/hdrs/defs.h	Thu Jan  9 18:17:32 1997
--- QUICK/hdrs/defs.h	Thu Apr 10 21:56:18 1997
***************
*** 195,203 ****
  
  
  # define VERSION	"2.4ME+"		/* Version number... */
! # define VERS_DATE	"Jan, 1997"	/* for elm -v option */
  # define WHAT_STRING	\
! 	"@(#) Version 2.4(ME+), USENET supported version, released Jan, 1997"
  
  #if defined(__STDC__) || defined(_AIX)
  # define ANSI_C 1
--- 195,203 ----
  
  
  # define VERSION	"2.4ME+"		/* Version number... */
! # define VERS_DATE	"Apr, 1997"	/* for elm -v option */
  # define WHAT_STRING	\
! 	"@(#) Version 2.4(ME+), USENET supported version, released Apr, 1997"
  
  #if defined(__STDC__) || defined(_AIX)
  # define ANSI_C 1
Index: QUICK/src/newmbox.c
*** elm2.4.ME+.31/src/newmbox.c	Thu Jan  9 18:16:24 1997
--- QUICK/src/newmbox.c	Thu Apr 10 21:38:11 1997
***************
*** 1105,1131 ****
  			     error_description(err), "reset - read_headers"));
  		  emergency_exit();
  		}
! 	      }
! 	      if (copyit && content_start >= 0) {
! 		if (fseek(temp, content_start, 0) == -1) {
! 		  err = errno;
! 		  MoveCursor(elm_LINES, 0);
! 		  Raw(OFF);
! 		  printf(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoTempFile,
! 		     "\nCouldn't seek %ld bytes into temp file.\n"),
! 			 mailfile_size);
! 		  printf("** %s. **\n", error_description(err));
! 		  dprint(1, (debugfile,
  			     "Error: Couldn't seek temp file %s: (offset %ld) Errno %s (%s)\n",
  			     cur_tempfolder, mailfile_size, error_description(err), "reset - read_headers"));
! 		  emergency_exit();
  		}
  		fbytes = content_start;
  	      }
- 	      line = lines_start;
- 	      content_length_found = FALSE;
- 	      current_header->content_length = -1; /* mark as if not found yet */
- 	      line_bytes = 0;
  	    }
  	    }
  
--- 1105,1131 ----
  			     error_description(err), "reset - read_headers"));
  		  emergency_exit();
  		}
! 		if (copyit) {
! 		  if (fseek(temp, content_start, 0) == -1) {
! 		    err = errno;
! 		    MoveCursor(elm_LINES, 0);
! 		    Raw(OFF);
! 		    printf(catgets(elm_msg_cat, ElmSet, ElmCouldntSeekBytesIntoTempFile,
! 		       "\nCouldn't seek %ld bytes into temp file.\n"),
! 			   mailfile_size);
! 		    printf("** %s. **\n", error_description(err));
! 		    dprint(1, (debugfile,
  			     "Error: Couldn't seek temp file %s: (offset %ld) Errno %s (%s)\n",
  			     cur_tempfolder, mailfile_size, error_description(err), "reset - read_headers"));
! 		    emergency_exit();
! 		  }
  		}
  		fbytes = content_start;
+ 		line = lines_start;
+ 		content_length_found = FALSE;
+ 		current_header->content_length = -1; /* mark as if not found yet */
+ 		line_bytes = 0;
  	      }
  	    }
  	    }
  
Index: QUICK/src/strings.c
*** elm2.4.ME+.31/src/strings.c	Thu Jan  9 18:16:25 1997
--- QUICK/src/strings.c	Thu Apr 10 21:42:32 1997
***************
*** 6,65 ****
   *
   * 			Copyright (c) 1986, 1987 Dave Taylor
   * 			Copyright (c) 1988, 1989, 1990, 1991 USENET Community Trust
!  *******************************************************************************
!  * Bug reports, patches, comments, suggestions should be sent to:
!  *
!  *	Syd Weinstein, Elm Coordinator
!  *	elm@DSI.COM			dsinc!elm
!  *
!  *******************************************************************************
!  * $Log: strings.c,v $
!  * Revision 5.8  1993/08/03  19:28:39  syd
!  * Elm tries to replace the system toupper() and tolower() on current
!  * BSD systems, which is unnecessary.  Even worse, the replacements
!  * collide during linking with routines in isctype.o.  This patch adds
!  * a Configure test to determine whether replacements are really needed
!  * (BROKE_CTYPE definition).  The <ctype.h> header file is now included
!  * globally through hdrs/defs.h and the BROKE_CTYPE patchup is handled
!  * there.  Inclusion of <ctype.h> was removed from *all* the individual
!  * files, and the toupper() and tolower() routines in lib/opt_utils.c
!  * were dropped.
!  * From: chip@chinacat.unicom.com (Chip Rosenthal)
!  *
!  * Revision 5.7  1993/07/20  02:26:58  syd
!  * Fix copy_sans_escape handling of tabs
!  * From: Syd via code from G A Smant
!  *
!  * Revision 5.6  1993/01/20  03:02:19  syd
!  * Move string declarations to defs.h
!  * From: Syd
!  *
!  * Revision 5.5  1993/01/19  05:07:05  syd
!  * Trim erroreous extra log entry
!  * From: Syd
!  *
!  * Significant changes to provide consistent Date and From_ header
!  * cracking.  Overhauled date utilities and moved into library.  Moved
!  * real_from() into library.  Modified frm, newmail, and readmsg utilities
!  * to use library version of real_from().  Moved get_word() from Elm
!  * source into library.  Added new library routines atonum() and strfcpy().
!  * Fixed trailing backslash bug in len_next().
!  * From: chip@chinacat.unicom.com (Chip Rosenthal)
!  *
!  * Revision 5.3  1992/12/24  22:16:06  syd
!  * Make copy_sans_escape expand tabs to prevent subject displays from getting messed up
!  * From: Syd via request from pgf@Cayman.COM (Paul Fox)
!  *
!  * Revision 5.2  1992/10/17  22:30:43  syd
!  * Force text arithimetic into unsigned for those systems
!  * with signed chars
!  * From: Marius Olafsson <marius@rhi.hi.is>
!  *
!  * Revision 5.1  1992/10/03  22:58:40  syd
!  * Initial checkin as of 2.4 Release at PL0
!  *
!  *
!  ******************************************************************************/
  
  /** This file contains all the string oriented functions for the
      ELM Mailer, and lots of other generally useful string functions! 
--- 6,12 ----
   *
   * 			Copyright (c) 1986, 1987 Dave Taylor
   * 			Copyright (c) 1988, 1989, 1990, 1991 USENET Community Trust
!  *****************************************************************************/
  
  /** This file contains all the string oriented functions for the
      ELM Mailer, and lots of other generally useful string functions! 
***************
*** 180,186 ****
       char *to;
  {
    int count=1;
!   int idx = 0, q = 0,i;
    char *ptr=to;
    char *last;
    char **res;
--- 127,133 ----
       char *to;
  {
    int count=1;
!   int idx = 0, q = 0, i;
    char *ptr=to;
    char *last;
    char **res;
***************
*** 188,194 ****
    dprint(8, (debugfile, "argv_from_to: to=%s\n",to));
  
    while (*ptr) {
!     int len = len_next_part(ptr);
      if (len == 1 && *ptr == COMMA)
        count++;
  
--- 135,141 ----
    dprint(8, (debugfile, "argv_from_to: to=%s\n",to));
  
    while (*ptr) {
!     int len = rfc822_toklen(ptr);
      if (len == 1 && *ptr == COMMA)
        count++;
  
***************
*** 202,208 ****
    ptr = to;
    last = ptr;
    while (*ptr) {
!     int len = len_next_part(ptr);
      if (len == 1 && *ptr == ',' && last && !q) {
        int k;
        *ptr = '\0';
--- 149,156 ----
    ptr = to;
    last = ptr;
    while (*ptr) {
!     int len = rfc822_toklen(ptr);
!     dprint(20, (debugfile, "   token: %.*s\n",len,ptr));
      if (len == 1 && *ptr == ',' && last && !q) {
        int k;
        *ptr = '\0';
***************
*** 212,223 ****
  	k--;
        last[k] = '\0';
        res[idx++] = last;
        last = NULL;
      } else if (len == 1 && *ptr == '<')
        q = 1;
      else if (len == 1 && *ptr == '>')
        q = 0;
!     
      if (*ptr && !last && *ptr != ' ')
        last = ptr;
  
--- 160,172 ----
  	k--;
        last[k] = '\0';
        res[idx++] = last;
+       dprint(20, (debugfile, "   addr: %.*s\n",last));
        last = NULL;
      } else if (len == 1 && *ptr == '<')
        q = 1;
      else if (len == 1 && *ptr == '>')
        q = 0;
!         
      if (*ptr && !last && *ptr != ' ')
        last = ptr;
  
***************
*** 233,238 ****
--- 182,188 ----
        k--;
      last[k] = '\0';
      res[idx++] = last;
+     dprint(20, (debugfile, "   addr: %.*s\n",last));
      last = NULL;
    }
    res[idx] = 0;
