ripMIME CHANGELOG

Format of entry line:
	- <Developer initials>:<Change made for REL[ease] or DEV[elopment] versions>

CHANGES---------------------------------------------------------------
Monday Dec 12, 2011
	-PLD:REL:1.4.0.10
	Added iconv output support via -x<set> thanks to Константин Молчанов
	Fixed many compile errors that have come up with newer gcc versions
	Fixed an incorrectly matched size/var pairing in MIME_headers.c thanks 
		to David Binderman, Gary Petersen, Dag Andersen and Tullio Andreatta

Fri Nov 08 2008
	-PLD:REL:1.4.0.9
	Fixed up the BASE64 decoding detection of boundaries which are
	sometimes missed because of the FFGET buffer limits are reached
	part way through the boundary line.  This is now solved by 
	calling a FFGET_fgets() on the lines which are presumed to 
	include a boundary specifier (eg, line starts with a leading
			hyphen ).
	This situation was primarily due to the use of the FFGET_fgetc()
	call which only looks ahead 1 char, before calling the BS_cmp().


Mon Nov 03 2008
	-PLD:REL:1.4.0.8
	Cleaned up ripOLE, OpenTNEF and ripMIME compile warnings based on
	the new more pedantic default settings as with Ubuntu 8.10.

	Updated ripOLE to handle nameless / unknown stream blobs, now
	produces OLE_data.xxx files in place of the random names being
	generated previously.


Sun Sep 21 2008
	-PLD:DEV
		Adjusted tnef/tnef.c to ensure consistent filename generation
		between multiple passes of a decode within the same process
		(see TNEF changelog)

Fri Feb 08 2008
	-PLD:DEV
		Added QP decoding patch from  jjohnston
			Added invalid char detection

Tue Oct 30 2007
	- PLD:DEV
		Added small patch from Claudio Jeker to fix a potential overflow
		in MIME_headers.c 

Wed Oct 24 2007
	- PLD:DEV
		Added MIME_read_raw which uses open/read/write calls rather
		than fopen/fread/fwrite.  This isn't yet used directly by
		ripMIME but rather is needed for its parent development 
		tree for Xamime.

Sun Jul 08 2007
	- PLD:DEV
		Fixed FFGET_fgets call boundary condition fault that can cause
		excess bytes to be consumed resulting in either smaller output
		files or potential segfaults.

		This was an incredibly difficult bug to track down as it simply
		refused to show up in regular testing and when it did finally 
		show up it was still very confusing in its behavior due to it
		being a combination of two bugs in the same function.


Fri Mar 03 2006
	- PLD:DEV:2211
		Added a header fixing routine in MIME_headers, this fix attempts
		to unwrap headers which are missing a leading space on the next
		line (original mailpack provided by Ruust - thanks)

		This feature can be disabled using --disable-headerfix


Fri Feb 24 2006
	- PLD:DEV:1748
		Fixed situation where a null-body email would result in the _header_
		file not being produced even when explicitly asked to via the '-e'
		option

Mon Dec 12 2005
	- PLD:REL:1235
		
		RELEASE 1.4.0.6

		Updated ripOLE to version 0.2.0


Wed Mar 30 2005
	- PLD:REL:0644

		RELEASE 1.4.0.5

		Fixed -d -i - combination error causing ripMIME to fail to decode
			Thanks to Daniel Fraga for noticing this.

		
Tue Mar 29 2005
	- PLD:REL:1703
		RELEASE 1.4.0.4

Tue Mar 15 2005
	- PLD:DEV:1545
		OLE2 decoding fix (see ripOLE)

Thu Feb 03 2005
	- PLD:DEV:1950
		Added recursion facility if the input mailpack/MIME file is 
		a directory.

Fri Dec 17 2004
	- Release 1.4.0.3
	- Improved attachment search abilities due to previous cleanups
	- Cleaned up excessively long header-search times
	- Cleaned up excess unwanted textfile outputs generated from 
		the qmail-bounce searching. A reduction of ~25% has been
		attained.
	- Handled Exim bounced email attachments	
	- TNEF segfault issues cleaned up (see TNEF's CHANGELOG)

Tue Dec 07 2004
	- PLD:DEV:0102
		Fixed up Apple double content disposition INLINE issue which
		could cause ripMIME to try decoding a mailpack for a VERY long
		time. Thanks to Nicolas MacPherson for the offending mailpack.


Wed Dec 01 2004
	- PLD:DEV:2330
		Fixed QP decoding error where trailing TABs and spaces were not
		culled.  

Mon Nov 29 2004
	- PLD:DEV:1106
		Fixed possible filename buffer overrun in MIME_decode_encoding() 
		function where sprintf() was being used to generate the filenames
		rather than the correct snprintf() call.


Sat Nov 27 2004
	- PLD:DEV:2049
		Added OLE2 decoding sanity fix (see ripOLE CHANGELOG)

Fri Nov 26 2004
	- PLD:REL:2238
		Release as 1.4.0.2

	- PLD:DEV:2028
		Fixed up ISO decode issues in the headers causing premature
		truncation.

Sat Nov 06 2004
	- PLD:DEV:10H27
		Fixed up numerous unsigned/signed comparison warnings.
		
		Fixed up TNEF read_32/_16 functions to allow for error
		condition returns.

Fri Nov 05 2004
	- PLD:DEV:22H57
		Applied Stepan Kasal patches for MIME_decode_b64() 4-char
		array initization and for the boundary_crash test continue
		if statement.


Wed Nov 03 2004
	- PLD:DEV:09H48
		Fixed compiler warning about MIMEH_save_doubleCR "comparison
		is always false".

Tue Nov 02 2004
	- PLD:DEV:10H41
		Added handling for x-mac filename forward-slash separators.

Sat Oct 23 2004
	- PLD:REL:17H14
		Release as 1.4.0.1

	- PLD:DEV:16H52
		Applied patch from Andreas Jobs to fix up situations where the
		multiple-filenames may not all be correctly hardlinked due to
		modifications being made via the FNFILTER_filter() calls.

		Many thanks to Andreas for picking up on this.

Mon Oct 18 2004
	- PLD:DEV:23H08
		Updated ripOLE code to prevent segfault caused by negative
		sector values in OLE_follow_minichain()

Sun Sep 26 2004
	- PLD:DEV:17H27
		Fixed UUENCODING detection in MIME_headers which would sometimes
		incorrectly choose UU rather than Quoted Printable.  Thanks to
		Stepan Kasal for pointing this out.


Sat Sep 25 2004
	- PLD:DEV:21H24
		Fixed memory leak where the header-info structure's
		string-stacks file filenames and names were not being
		flushed after use.

		Fixed accidental flagging of bad headers when a header set
		contained the same filename in both the content-type and
		content-disposition headers.

Sat Sep 11 2004
	- PLD:DEV:23H22
		Fixed an endless loop in ole.c when dealing with zero length
		MINIfat reads.

Tue Sep 07 2004
	- PLD:DEV:21H10
		Fixed UUENCODED decoding when the UUE filename is specified
		in the headers (see uuencode.c)

Sun Sep 05 2004
	- PLD:DEV:09H30
		Fixed OLE_version() inclusion in MIME_version() when RIPOLE 
			wasn't defined.  Thanks to Tomasz Klim for noting this.

Sat Sep 04 2004
	- PLD:DEV:10H47
		Fixed incorrect return-code propagation from lower recursion
			levels, causing ripMIME to prematurely terminate some 
			decoding, thus not seeing some attachments.
			Thanks to Fred Van Andel for supplying the offending
			mailpack.

Fri Sep 03 2004
	- PLD:DEV:09H57
		Fixed empty-boundary handling (Mailpack sent by Ian Samuel)

Tue Aug 31 2004
	- PLD:DEV:22H18
		Fixed up a segfault which could occur while running with 
		--debug on some emails (See bug #32)

Mon Aug 30 2004
   - PLD:DEV:20H21
      Fixed up 'make solib' option (Thanks to Oden Eriksson for 
				pointing out that it was broken)

Tue Aug 17 2004	
	- PLD:REL:16H36
		Released as 1.4.0.0

Mon Aug 16 2004
	- PLD:DEV:13H43
		Added strstack objects into the MIME headers struct (hinfo)
		to track multiple filenames exploits.  When the filename 
		has been saved to the disk, the additional filenames are 
		then hardlinked (this prevents excessive disk consumption
				as hardlinks don't really take up space).


Sun Aug 15 2004
	- PLD:DEV:22H21
		Added '--verbose-defects' which will dump all the header
		defects detected during the scanning of the MIME segment

    Decoding filename=attachment.exe
    Header Defect: Missing separators: 1
		
		The number trailing the defect description is the number 
		of occurances within the headers that the defect occurred.

		Detected defects won't stop the ripMIME decoding by default,
		instead ripMIME will step around the defects to the best of
		its abilities and flag the defect register in the hinfo
		defects[] array.
		

Wed Aug 11 2004

	- PLD:DEV:23H42
		Added a new array 'defects' into the hinfo structure in 
		MIME_headers.h.  The purpose of this array is to track all the
		defects/mistakes in the MIME headers, allowing the calling 
		program (of the MIME lib) to make a decision on the mailpack
		(ie, should defective mailpacks be allowed to pass through).

		More details will be added over the next few days.  This new
		feature isn't quite ready yet.

	- PLD:DEV:23H22
		Fixed handling of multiple sequential quotes on filenames and
		other parameters, ie;

			name=""attachment.exe""

	- PLD:DEV:23H10
		Added boundary pushing to the stack within MIME_headers in order
			to catch out situations where multiple boundaries are defined
			in the headers.

	- PLD:DEV:22H21
		Changed ISO decoding routine to _not_ convert underscores to 
			spaces.  This is so that ISO encoded items such as boundary
			definitions aren't turned into non-valid items, ie
			__BOUNDARY__ becomes '  BOUNDARY  '.


Wed Aug 11 2004
	- PLD:DEV:18H33
		Added correct handling of RFC2231 encoded strings;
			such as:
			   title*0*=us-ascii'en'This%20is%20even%20more%20
			   title*1*=%2A%2A%2Afun%2A%2A%2A%20
				title*2="isn't it!"

	- PLD:DEV:17H10
		Fixed up handling of multiple atom separators (=,: and ;)

	- PLD:DEV:12H57
		Added RFC822 comment stripping from headers (while being 
				processed in the MIME_headers module).  The original
		headers will be preserved verbatim in _headers_ file.

Mon Aug 09 2004
	- PLD:DEV:14H48
		Added --timeout <seconds> feature which allows you to set a CPU
		seconds timeout.  If the alarm goes off, ripMIME will terminate
		with an error code of RIPMIME_ERROR_TIMEOUT (5) and leave a log
		entry (if required).

		This feature is useful to prevent server-load runaway if ripMIME
		has a problem decoding a particular email

	- PLD:DEV:14H11
		Added --formdata option to allow the decoding of HTML form
			data which often contains embedded \0 sequences which cannot
			be accurately handled by normal email-MIME decoding routines
			(yet)

Fri Jul 30 2004
	- PLD:REL:21H06
		!!!!URGENT RELEASE!!!!
		Released 1.3.2.3

		There's viruses going around exploiting the ability to hide the 
		majority of their data in an attachment by using blank lines and
		other tricks to make scanning systems prematurely terminate their
		base64 decoding.

		This release fixes that by ignoring consecutive CR checks in the
		BASE64 data and rather attempting to treat it as a stream of data
		with arbitary invalid bytes in it.


Thu Jul 29 2004
	- PLD:DEV:23H11
		Fixed infinite loop with OLE decoding in ripOLE, mailpack supplied
			by Dallas L. Engelken.   The decoding is not correctly handled
			at this point (no sensible data can be extracted from the .doc
			file) but at least ripMIME/ripOLE will not infinately loop.


Tue Jul 27 2004
	- PLD:DEV:12H55
		Applied filename paranoia patch provided by Marco Ariano

Mon Jul 19 2004
	- PLD:REL:12H04
		Released 1.3.2.2

Sat Jul 17 2004
	- PLD:DEV:14H22
		Silenced unwanted verbosity from recursion bounds breach report
			in mime.c:2674
		Silenced unwanted verbosity from tnef decoder about invalid
			signature when in non-verbose mode.
		Silenced unwanted verbosity from ripOLE (see ripOLE CHANGELOG)	

			
Sat Jul 03 2004
	- PLD:DEV:14H18
		libmime-decoders.c:MDECODE_decode_ISO()
		Fixed situation where ISO encoded string  without a 
		language page specification would cause the rest of the
		headers to be truncated from that point; typical example
		is: 
			Subject: =??Q?Radiant=20Rubies=20Just=20for=20You.=20SAVE=20$$$'S.?=

			note the =?? rather than say =?iso-9352  etc

		Made the ISO decoder complain about a dud encoding type
		character if 'verbosity' is on, else, it doesn't report
		the error (this ensures that things like qmail etc don't
				get upset)


Mon Jun 28 2004
	- Release as 1.3.2.0

Sun Jun 27 2004
	- PLD:DEV:15H31
		Fixed duplication of 'Decoding Filename=' reporting when 
			decoding a uuencoded MIME segment with the filename
			defined in the headers.

	- PLD:DEV:14H09
		Added '--extended-errors' option to allow the turning on of
			non-fatal errors.

		Corrected various return-code issues
			#define RIPMIME_ERROR_CANT_CREATE_OUTPUT_DIR 1
			#define RIPMIME_ERROR_CANT_OPEN_INPUT_FILE 2
			#define RIPMIME_ERROR_NO_INPUT_FILE 3
			#define RIPMIME_ERROR_INSUFFICIENT_PARAMETERS 4

	- PLD:DEV:12H15
		Fixed UUdecode situation where the MIME segment defines the 
		filename in the headers, rather than the more common case of
		having a "BEGIN 666 filename" content.

		Thanks to Dallas L. Engelken for detecting this and supplying
		a suitable mailpack.

Fri May 21 2004
	- PLD:DEV:13H19
		Fixed up boundary stack BS_cmp() size compairson check by
			creating a new function BS_is_long_enough() which takes
			the length of the line being tested and compares it to 
			the current 'smallest permissable' boundary.

		Fixed special case boundary situation where the boundary
			is defined only as '-'.


Thu May 13 2004
	- PLD:REL:14H07
		Release 1.3.1.2

	- PLD:DEV:00H15
		Due to the MIME headers alteration, the ISO decoding for filenames
			started having issues because of gaps in the decoded ISO string.
			This has now been fixed.

Wed May 12 2004
	- PLD:DEV:21H57
		MIME_headers.c:1295; added \t as another possible header line delimiter
			(along with \n \r and ;)

	- PLD:DEV:21H55
		Corrected the header unwrapping according to RFC2822 specifications.
		See comments in MIME_headers.c ~ line 886

Mon Apr 12 2004
	- PLD:DEV:21H12
		Fixed up some compile errors on Solaris 9 (char indexes)

Mon Apr 5 2004
	- PLD:REL:19H38
		Released as 1.3.1.1

	- PLD:DEV:11H28
		Fixed TNEF LOGGER call with missing paramter

		Fixed possible underrun in the MIMEH_read_headers() call when trimming
		off trailing \r and \n chars from the read header line.

		Fixed some LOGGING lines which were not correctly setup with the MIMEH_DEBUG
		test (resulting in spurilous debugging info when it wasn't desired)

		Added 'smallest stored boundary' (glb.smallest_length) to the boundary-stack
		module so that it could quickly eliminate a lot of boundary tests based 
		purely on the size of the input test line.  This also eliminated the problem
		that would sometimes appear in valgrind where an error in BS_cmp() with the
		strcmp() call would arise.

		The smallest_length variable can only decriment. Theoretically it could 
		be reduced to a point where it's value is '1' but it won't affect the 
		selectivity of the algorithm. The worst case scenario is that smallest_length
		is set to 1 in which case the algorithm will behave as before the change
		in the code was made.

	- PLD:DEV:01H59
		Added header subject initializer into MIME_headers_get() to stop valgrind
		complaning on certain emails where the subject would not be located in the
		headers.

		Added more stringent testing of the subject copy-over process in MIME_unpack_stage2
		after the headers get call.

Sat Apr 4 2004
	- PLD:DEV:23H54
		Corrected a segfault when running debug mode and mime.c:2623 logger line
			was called (didn't have a ,FL at the end)
		if (MIME_DNORMAL) LOGGER_log("%s:%d:MIME_handle_plain:DEBUG: Handling plain email",FL);

		Explicitly called OLE_decode_file_done() after the OLE decode process because
			sometimes files weren't being closed due to a non-OLE file being opened
			(hence closing premature of the internal call of _file_done().  It's okay 
			 to call this function multiple times as it checks all the variables to
			 ensure that they're not NULL before trying to clean them up.


Thu Mar 11 2004
	- PLD:DEV:12H44
		Updated man page for 1.3.1.x

Wed Mar 10 2004
	- PLD:REL:23H59
		Re-released 1.3.1.0

	- PLD:DEV:23H59
		Switched all calls (interal) to MIME_unpack() to MIME_unpack_single(),
			especially for the mailbox handling routine - which would cause the
			whole system to loop and fail.

	- PLD:REL:08H31
		Corrected generate-buildcodes.sh where the date stamp might not return 
		a valid integer.

Tue Mar 9 2004
	- PLD:REL:01H15
		Release 1.3.1.0 

		Set --qmail-bounce option to be on by default (appears to be quite stable)
		and added --disable-qmail-bounce to turn it off instead.


Sun Mar 07 2004
	- PLD:DEV:15H30
		Dev release.

	- PLD:DEV:13H20
		Altered UUEncode's error reporting system.  Now when a function returns
		-1, the calling program should check the global uuencode_error to see 
		what the error is.  This system is similar to those used with a lot of
		standard functions like fopen().  The error codes are listed in 
		uuencode.h

		We needed to do this so that we could return positive-integer error 
		codes from UUENCODE_decode_uu(), because normally this function will
		return a positive integer representing the number of files it decoded
		from the supplied file.

	- PLD:DEV:12H50
		Corrected mistake with the recursion level passing in MIME_unpack_single_fp()
		which was passing '0' value to MIME_unpack_stage2(), causing ripMIME to 
		fail with a segfault when very deeply recursed emails were encountered. NOTE
		this segfault occurs because of running out of stackspace, not because ripMIME
		specifically is broken.  ripMIME seems to be able to recurse to about 160
		levels deep on the test machine before stack failure.


	- PLD:DEV:
		Set MIME_set_header_longsearch() to only take effect if we're calling
		a plain-text file, ie, being handled by MIME_handle_plain()

Sat Mar 06 2004
	- PLD:DEV:
		Unbelievable amount of restructuring required so I could get 2
		mailpacks with seperate problems to work.

		Improved the discrimination and speed of the BS_cmp() operation
		by first taking a count of all the numeric+alpha chars in the 
		boundary and then comparing against the existing boundaries.  This 
		helps speed things up because there's no longer a string
		comparison per test if there's not even going to be a chance
		of a match.  Also, the discrimination is improved because I had an incident where
		two boundaries existed, with one being a substring of the other,
		this was passing through ripMIME with the previous 1.3-dev release
		for some reason.

		A lot of code was removed from the MIME_unpack_stage2() call and placed
		rather into seperate function calls. The new function calls are;

			MIME_handle_multipart()
			MIME_handle_rfc822()
			MIME_handle_plain()

		No doubt more of these will be added over time as I work my way through
		the old code.



Fri Mar 05 2004
	- PLD:DEV:
		Added a stack system for storing the filenames used during any 
		given MIME_unpack() call, this means that when the MIME_unpack()
		call finishes, it doesn't clobber the textfile* files which might
		have actually been owned by a parent process (as MIME_unpack() is
				recursive in some situations).

		This addition once more beefs up the size of ripMIME, but is required
		in order to deal with the ever increasing complexity of emails
		which are passing through our systems.  The new files are
			strstack.c
			strstack.h
		These two new files are actually adapted/stripped-down versions of
		the boundarystack files.
			

	- PLD:DEV:
		Added a new script to the build process to generate a file called
			'buildcodes.h'; this file contains the date in UNIX timestamp
			and human-readable date, along with the output from 'uname -a'

		This has been added to assist mostly in local build checking, but
		also may serve as a good indicator on other machines to see if 
		a ripMIME version is absolutely current.


Mon Mar 01 2004
	- PLD:DEV:
		Corrected misspelling of 'QuotePrintable' to 'Quoted-Printable'

	- PLD:DEV:
		Updated ripOLE licence to match the ripMIME licence.

	- PLD:DEV:
		Altered the UUDECODING routine to not complain about lack of
		permissions on a line which starts with begin but is perhaps 
		from a plain-text file (ie, not UUENCODED).
		Suggestion given by Daniel Fraga.

	- PLD:DEV:
		Removed --syslog_on and --stderr_off paramters from the help dump
		(thanks to Mat Williams for noticing this). These paramters have 
		been deprecated for quite a long time.



Mon Feb 16 2004
	- PLD:DEV:
		Added ripmime.1 man file

Sun Feb 08 2004
	- PLD:DEV:
		Adding facility to pull out/decode qmail bounced emails - this is
			against RFC compliance, but people are wanting this badly so I
			suppose, once again, Microsoft wins (because Outlook seems to 
					gleefully find the attachments when they should in fact
					be displayed as verbatim - not decoded).

			use the --qmail-bounce parameter to activate this 'feature'.

	- PLD:DEV:
		Rolled in a patch by James Stevens to make ripMIME usable for his
		AV milter tool.  Also included a patch to (for now) split the 
		MIME_unpack_single() into _single_fp() and _single(), paving the 
		way for future file-handle based processing rather than FILE *

	- PLD:DEV:
		Added recursion-maximum level paramter (--recursion-max) as
		suggested and patch-supplied by James Stevens (some alterations
				made to the patch)


Wed Jan 14 2004
	- PLD:DEV:
		Added RCF822 content checking for files generated by the text dump
			from an UNSPECIFIED encoding/type format.  This allows us to
			pick out mailpack contents even when there's a set of false
			headers prior to the real body content (as depicted by the 
					samples provided by Farit - many thanks ).

Thu Dec 18 2003
	- PLD:DEV:
		Updated licence file to correctly indicate the true nature of this 
		project

Sun Dec 07 2003
	- PLD:DEV:
		Completed the 'quiet' functionality

	- PLD:DEV:
		Fixed up decoding of multiple segment filenames in headers, ie;
			filename*1="foo";
			filename*2="bar.";
			filename*3="exe"

	- PLD:DEV:
		Corrected handling of */octet content type storage, opting to use
		RAW decoding rather than plain text.

Sat Nov 14 2003
	- PLD:REL:
		Released ripMIME v1.3.0.5
		
Fri Oct 30 2003
	- PLD:DEV:
		Fixed up decoding issue in stage2 where ripMIME would try to decode
		a zero-byte file produced from the BASE64 decoder routine.

Fri Oct 23 2003
	- PLD:DEV:
		Added integration of the -p <prefix> flag with the --name-by-type
		flag.  The prefix will only appear on the type-based named attachments
		if it's explicitly requested (ie, it will not appear if you don't
				use the -p flag, even though there is a default prefix ).

Thu Oct 23 2003
	- PLD:DEV:
		Added --name-by-type feature (as requested by Marcel Manz) to create
		the filename of an attachment if it has no filename= or name= header
		based on its content-type

Fri Oct 10 2003
	- PLD:DEV:
		Moved house - completely changed everything in my life. 
		Haven't changed much in ripMIME.  
		Fixed some Makefile issues and incorrectly included .o
		files, as reported by Paul Theodoropoulos (thanks!)

Wed Sep 10 2003
	- PLD:DEV:
		Rolled in changes from valgrind process.
		Fixes several potenial segfault situations, especially with ripOLE.

Fri Aug 29 2003
	- PLD:DEV:
		Fixed mailbox decoding from STDIN

Thu Aug 28 2003
	- PLD:DEV:
		Changed the mime-headers output path setting to be set from within
		the MIME_unpack() call, rather than allowing it to be set externally

		Prior to this change, doubleCR files were being saved in places like
		the root directory and other unsavory locations.

		ripOLE library updated - segfault fixed when reading miniFAT with a 
		negative start sector value

Sun Aug 24 2003
	- PLD:DEV:
		Fixed up situations where an embedded email with an attachment
		filename (As apposed to just raw embedded with RFC822 content-type)
		could not be decoded (would be passed over and ignored).

		Thanks to Ricardo Kleemann for supplying a sample mailpack.  On
		fixing up for this one mailpack, my test suite jumped from decoding
		1092 attachments to 1193 attachments.


Wed Jul 16 2003
	- PLD:DEV:
		LOGGER % filtering solution fixed

	- PLD:DEV:
		Bundled in the ripOLE engine into ripMIME, this means that 
		ripMIME can now extract files which have been included in an
		MS Office file.  Currently ripOLE cannot extract attachments
		which have been embedded directly into the WordDocument stream
		data however (this is usually Images and some sound files). 
		However it does successfully get most/any files which were
		included using Insert->File

		Added --no-ole option to make ripMIME not decode OLE files.

Mon Jun 30 2003
	- PLD:DEV:
		Added libripmime build ability, allowing developers to use
		#include "ripmime-api.h" and then link with libripmime.

Sun Jun 22 2003
	- PLD:DEV:
		Fixed QuotedPrintable end-of-string decoding 1-off char error
		which would cause ripMIME to complain that it ran out of data
		because it was comparing "if (ip < slen -2)" when it should have
		been comparing to slen -1  (because the '<' implies a -1 by 
				default )

		Thanks to Paul Theodoropoulos for his submissions of mailpacks
		which have greatly assisted in locating these obscure errors.


Sat Jun 21 2003

	- PLD:DEV:
		Fixed UUdecode false-positive hit in UUDECODE_is_uuencode_header()
			(thanks to Bernard Fischer once more for supplying a mailpack
			 which demonstrated the fault and for providing a patch )

	- PLD:DEV:
		Added an explicit RFC822 decoding routine into MIME_unpack_stage2()
		because a supplied mailpack which had multiple documents, all in
		individually wrapped RFC822 attachments caused ripMIME to incorrectly
		interpret the segment, till the end of the mailpack as the entire 
		RFC822 message ( consequently, the recusion limit would eventually
				kick in and exit ripMIME ).

		By placing an explicit detection into _unpack_stage2(), the problem
		has been eliminated without affecting the decoding accuracy of other
		mailpacks.

Wed Jun 18 2003
	- PLD:DEV:
		Relaxed the base64 decoding standard to allow for a possible single
		blank line within the B64 stream.  This has been needed because there
		are some rare mailpacks produced by [obviously] broken agents which
		have spurilous blank lines amongs the data-stream ( but are terminated
				by boundaries )
		
		I feel this is a really ugly way to deal with this problem - people 
		should really make their B64 encoders conform to realistic standards
		rather than hoping that all the decoders will pick this up accurately

		I would have left out the CR sensitivity entirely - except that there
		is another example mailpack I have where [incorrectly] there is plain
		text after the B64 stream has ended ( incorrectly inserted disclaimer
				no doubt ).

		I may revoke this relaxation if it can be found that the 'other' example
		mailpack is in fact interpreted [wrongly] by all other MUA's.

		Update - both mailpacks are correctly decoded by Sylpheed :-\

Sun Jun 15 2003
	- PLD:REL: Released 1.3.0.4

	- PLD:DEV: Corrected UUdecoder path issues, causing UUencoded attachments
		to sometimes be missed from decoding

Sat Jun 07 2003
	- PLD: Corrected misinterpretation of the return result from uuencoded_decode
		where mime.c was propergating the return result into the _decode_stage2()
		calls, causing processing of the mailpack to prematurely halt.

		Thanks to Jiri Kucik for submitting the offending mailpack.


Fri May 09 2003
	- PLD: Attempting to clean up the handling of % symbols in filenames
		and their output via the LOGGER_log() call.  Normally they used
		to be converted into %% pairs so that the final printf type call
		would not try and interpret the % as a positional identifier.
		---still in work.

Tue May 05 2003
	- PLD: Added NULL test for filename reporting callback in mime.c
		Without this NULL test, other applications using the mime module 
		could fail if they did not have the callback function set to
		their own.

Sat May 03 2003
	- PLD: Added Content-Transfer-Encoding 'binary' to ripMIME, which
		causes ripMIME to interpret the data the same as 'raw'.

Fri May 02 2003
	- PLD: Added --no-mht switch, disables the decoding of MHT files
		(A microsoft 'combined' WWW-page-in-email sort of format)

Wed Apr 30 2003
	- PLD: X-men 2 at theaters
	- PLD: Added option-usage for --no-tnef
	- PLD: Enhanced pldstr module to provide string search/replace
		functionality and case-insensitive strstr
	
Sun Apr 27 2003
	- PLD: Pushed global variables into singular global struct for 
			boundary-stack module

	- PLD: Optimised the boundary-stack BS_cmp() call so that it will
		only do strcmp calls (rather than strstr()) for the first  N
		characters, where N is defined by BS_BOUNDARY_DETECT_LIMIT_DEFAULT
		and consequently, BS_set_boundary_detect_limit().  

		Currently the default is set to 4 characters, I do not know of
		any mailpacks out there which are using more than the 'defacto'
		'--' prefix to the boundary to seperate MIME sections

	- PLD: Added extra parameter to the BS node, to store the length
		of the boundary, saves processing time later when comparing
		boundaries in BS_cmp()

	- PLD: Corrected DoubleCR decoding issue in UUENCODE_decode_uu()

	- PLD: Fixed ranging error in filename renaming method selector
		(MIME_set_renamemethod)

	- PLD: Activated the --no-quotedprintable option.  This will stop
		ripMIME from attempting to decode/decypher attachments which have
		been QuotedPrintable encoded (some forwarded emails are encoded
			like this )

	- PLD: Added a small cleanup function for after BASE64 decoding.
		Normally when BASE64 decoding finishes there's often a single
		line left before the next boundary, this typically has been 
		written out as a textfileXX file.

		The additional function absorbs this data [and discards].

		This also should improve [ a little ] the performance as ripMIME
		will not have to go through the entire header-reading/parsing/
		decoding process each time.

Sat Apr 26 2003
	- PLD: Dropped a lot of old code which was residing in MIME_headers
		for the sake of 'rollback' in the event that the new header
		parsing code didn't work.

Sat Apr 19 2002
	- PLD: Added fixes for VCARD/UUENCODE detections thanks to Bernard
		Fischer.

Sat Mar 29 2003
	- PLD: Added better handling of the apple-double encoding, now when
		and attachment is decoded, it'll be decoded into 3 parts (overall)
		1. mac-FILENAME : This usually contains nothing and can be ignored.
				The file is saved in the event [for what ever reason] that data
				or text was placed at the start of the apple-double attachment
				pair [ Similar in a way to the potential presence of data at the
				beginning of a MIME encoded email, which usually says "This email
				is encoded with MIME".

		2. FILENAME.applemeta : This is the metadata associated with the original
				attachment

		3. FILENAME : This is the actual file/attachment

Fri Mar 28 2003
	- PLD: Release
	- PLD: Replaced header parsing code with one which follows the 
		'standards' compliant structures ( while still looking out for
		various exploits ).  This new parsing code will open the way
		for better information passing [back] to programs using the ripMIME
		API. Also, the new header code improves the false-positive rate with
		filenames.

	- PLD: More intelligent support for the Macintosh Applefile format, which
		uses a two 'file' approach for sending files ( meta data file and data
				file ).  Now, any mac files will have their applefile-metadata
		stored as 'applefile_*'.  Although this is not yet perfect, it at least
		ensures that the real data file is correctly saved with the right name.


Thu Mar 20 2003
	- PLD: More typos in the LOGGER_log() calls fixed up

	- PLD: Removed the functions MIME_set_nouudecode() and UUENCODE_set_nodecode()
		because they were 'confusing' due to inverted logic, additionally it brings
		the functions inline with all the other modules which use _set_decode()
		to [en/dis]able the decoding process.

Wed Mar 19 2003
	- PLD: Corrected several search-replace messups from original conversion
		to running everything under LOGGER.  

	- PLD: Added facility to report filename decodings from within the various
		decoding modules (TNEF and UUENCODE at this point) so that the reporting
		function can be defined from the calling application.  If no callback
		is provided, the modules will default back to a very basic 1.2.x format.


Mon Mar 17 2003
	- PLD: Emergency release of 1.3.0.2

	- PLD: Fixed major bug in the MIMEH_headers_read() call which would 
		cause the first line of the headers to be overwritten by following
		lines ( in memory ) - Ultimate effect of this is that several files
		would not be decoded because the vital file information would be
		lost.

	- PLD: Unified logging output across all modules

	- PLD: Fixed space retention on header-wrapped filenames ( again
			thanks to Kees Damen for providing a suitable mailpack )

Fri Mar 14 2003
	- PLD: Fixed linewrap filename issues in headers ( thanks to Kees Damen
		for pointing this issue out ).

	- PLD: Fixed 0 length string issue with PLD_strncpy and replaced 
		existing algorithm with a more robust one as provide by 'Defrost'

	- PLD:  Rolled in unified pldstr module which replaces strlower,
		XAM_strtok and zstr.

	
Sat Mar 01 2003
	- PLD: Patched parameter parsing code to allow it to accept non-space
		seperated parameters, ie, -d/tmp ( Patch supplied by Bernard Fischer )

Sat Feb 22 2003
	- PLD: TNEF: Corrected pointer clobbering on 64-bit systems in TNEF decoding,
		and added memory allocation free'ing.  Both patches submitted by
		Bernard Fischer and adapted by PLD

Thu Feb 19 2003
	- PLD: Fixed content-type 'trailing' issue causing ripMIME to report
		the previous content-type if the new attachment headers did
		not contain a content-type. ( Mailpack contributed by Bernard Fischer )

Wed Feb 19 2003
	- PLD: Converted command-line options to use hyphens '-' rather 
		than underscores '_' for word seperators.  NOTE, the old
		underscore seperators will still work but they are considered
		depricated.

	- PLD: Added multiple additional verbosity options:
		--verbose-oldstyle : Output information in the format
			used from the 1.2.x series of ripMIME
		--verbose-contenttype : Output content-type information
			of each file decoded ( Contributed by Thomas E Dell )

	- PLD: Introduced a new verbose information format for file details.
		The new format uses name=value pairings for the output, this
		allows parsers to easially decode the output into useful data
		if need be.  An example of the output is now:

		Decoding content-type=text/html filename=foobar.html

		Currently only 'content-type' and 'filename' are reported but more
		options will most likely be added in the future.
		

	- PLD: Commenced v1.3-dev development.


Fri Feb 07 2003
	- PLD: Released as 1.2.17.0 ( This is the last 1.2.x release, we
		will now move to 1.3-dev and 1.4-stable releases

Thu Feb 06 2003
	- PLD: Corrected testing conditions of the name= substring to test for
		both a space OR a ';' (semicolon) in order to accept the value
		after the 'name=' as being a filename.
		(Thanks to Marc Bleuwart for the supplied mailpack exhibiting this
		issue )

Wed Feb 05 2003
	- PLD: Added total BASE64 decode line count output for failed decoding
		operations when in --debug mode

Sat Feb 01 2003
	- PLD: Corrected some *_init() calls and *_set_verbose() as well as
		*_set_debug().

	- PLD: Broke down the mime.c file into some smaller modules:
		boundary-stack.[ch] - Handles the boundary string ordering for
			the mailpack decoding.

		filename-filter.[ch] - Performs basic filename sanity / paranoia
			checking.

		uuencode.[ch] - A bit of a misnomer, this module currently deals
			with the detection and decoding of uuencoded data.

	- PLD: Merged 3 string handling modules into one.  While this seems to go
		against the flow against the move to modularise the mime.c file
		it is better to have the files XAM_strtok, zstr and strlower all
		merged as they are all part of the same family of strings handlers.

	- PLD: Moved ISO decoding to directly after all the headers have been read
		and a "true blank" has been received.  This way we do not have to
		worry about decoding the individual components of the headers, rather
		they are presented in an already decoded form when the calling program
		gets back the header pointer.

Fri Jan 31 2003
	- PLD: Reordered the MIME_decode_filename() function so that it attempts to
		decode ISO filenames -before- any paranoia filters are applied.  This
		is because certain BASE64 characters ( ie / ) are interepreted as
		paranoid invoking characters, thus are stripped from the filename 
		before ISO decode gets to use them.

		Thanks to Michal Perchel for supplying the mailpack exhibiting this
		property.


Tue Jan 28 2003
	- PLD: Replaced MIME_read() fgetc/fputc calls with a fread/fwrite binary
		functions to prevent ripMIME from terminating its file/stdin reading
		too soon if it received an EOF character.

Mon Jan 27 2003
	- PLD: Corrected segfault in parameter parsing if the last parameter was 
		a -d, -i or -p.  Whole parameter parsing block moved to its own
		function.

	- PLD: Replaced scandir() calls in mime.c ( for post-decode cleanup ) with
		opendir()/readdir() - Solaris ( and possibly other OS's ) have 
		different implementations of scandir() compared to Linux/BSD

	- PLD: Silenced several messages in MIME_headers and MIME tnef decoding which
		were appearing despite having -v selected

Sun Jan 26 2003
	- PLD: in MIME_decode_filename(), removed limitation of filenames only having
		a space character and lengths greater than two (2).

	- PLD: Corrected header unfolding in MIMEH_read_headers()
		This rectifies the situation where some filenames are cropped because they
		were spread over two lines in the headers.

	- PLD: Moved ISO decoding functions and QuotedPrintable functions into a new
		module called 'libmime-decoders'.  

	- PLD: Initialised encoding_type in the ISO decoding routines in order to 
		silence some compilers about a 'usage unitilised' warning.

	- PLD: Corrected situation where an attempt to extract a file name would
		be misled due to a substring 'name' appearing anywhere within headers.

		Narrowed down the conditions required in order for a 'name' word to appear.
		This corrects the issue as reported by Chris Hine

	- PLD: I've sorted out the Quoted-Printable decoding
		issues.  Who would have thought such a relatively simple 
		decoding process could cause so much pain.  As a consequence
		some of the prior 'patches' have now been removed as they are
		no longer needed. ( removed patches: Mirko Buffoni )

Sat Jan 25 2003
	- Planning on releasing as 1.2.17.0

Fri Jan 24 2003
	- Created a new function to handled decoding of ISO encoded strings, now called
		MIME_decode_ISO().  This function is used by MIME_decode_filename() and
		will also be used by any programs wanting to decode other ISO encoded strings
		such as email addresses and such.

	- Removed MIME_init_hexconv() call ( which previously setup the BASE64 conversion
		matrix - but we now have a compile-time static array setup for that )

	- Renamed 'quick_clean_filename()' to be MIME_filename_paranoid_filter()
		which is called from within MIME_decode_filename()

	- Renamed MIME_clean_MIME_filename() to MIME_decode_filename() as its
		primary function is mostly to handle ISO decoding as well as path
		prefix stripping.

	- Deprecated --no_paranoid and rather added in --paranoid. 
		Setting --paranoid on will result in any high-ascii
		characters to be set to _'s

	- Changed void return value of quick_clean_filename to 'int'

	- Added testing of '=' char prior to a ? for testing presence of
		an ISO encoded filename in MIME_clean_MIME_filename()

	- Added functional handling of ISO encoded filenames in headers
		( see MIME_clean_MIME_filename() ).  Still need to merge
		the functions of MIME_clean_MIME_filename() and quick_clean_filename()

Wed Jan 22 2003
	- Corrected functioning of --no_nameless operations.

Tue Jan 21 2003
	- Added trailing \n break after decoding a QuotedPrintable line
		(submitted by Mirko Buffoni )


Mon Dec 16 2002
	- Corrected soft-break decoding of Quoted-Printable encoded data

Tue Nov 12 2002
	- Released as 1.2.16.21
	- Updated FFGET module to 1.0.0.3 release - fixes garbage-end
		problem with some BASE64 decodes which don't terminate
		their data with a \n[\r]

Sat Nov 09 2002
	- NOT-RELEASED (internal use only, see 1.2.16.21)  1.2.16.20
	- Changed the strlower() function to use unsigned char rather
		than signed char, this allows for non-ASCII conversions
		on the tolower() call without breaking (ie on non-english
		character sets)

Wed Nov 06 2002
	- Released as 1.2.16.19
	- Added a patch from Phil Brutsche to deal with space-embedded
		filename, name MIME fields.


Fri Oct 11 2002
	- Corrected segfault when a filename with a \" ending was encountered
	- Cropped filenames with ? in them which are NOT ISO encoded to only
		include the part before the ?

Thu Oct 10 2002
	- Updated the logger file which contained a segfault issue
		when sending a string containing a % symbol to syslog.
	- 

Wed Jun 26 2002
	- Added MIME-headers save-file closing function. This prevents
		a segfault when MIME_unpack() is called multiple times
		within the same program.

Fri May 31 2002
	- Release as 1.2.16.16
	- Fixed same issue for Double-CR saved files
	- Failure to prefix the unpackdir onto the recursive decoding of 
		mailpacks extracted from within mailpacks (ie, EML files) caused
		extractions to directories other than the present-working-dir to 
		fail [partially] due to not being able to locate the newly created
		/ extrated mailpack.
		
		That teaches me to 'ignore' the warnings that were popping up in my
		syslogs about 'Cannot locate file'.
		
		
Sun May 26 2002
	- Release as 1.2.16.15
	- bug causing ripMIME to enter into an infinite loop if the boundary
		contained the phrase "boundary=" within it.  Thanks to
		Steffen Clausjuergens for supplying the mailpack exhibiting
		this defect!

Sat May 25 2002
	- Release as 1.2.16.14
	- Minor bug in FFGET_raw() causing missing of decoding due in 
		mailpacks which have mixed EOL definitions, ie, the 
		email uses \n only in the main headers, but then switches
		to \r\n in the bodies [ Can someone /PLEASE/ tell me why
		any peice of email software would do this !?!? ]

Wed May 22 2002 
	- Release as 1.2.16.13
	- Corrected block-boundary read line error with FFGET_fgets()
	- Corrected segfault error with UUDECODE due to XAM_strtok() 

Sun May 12 2002 (Mothers Day - Be nice to your mother and take the day off
		from IRC'ing or sufing the net)

	- Release 1.2.16.12 .... one day I'll release 1.2.17.0

	- Improved nested decoding.  There was a very strange size-specific
		decoding mishap which was causing some packs to unpack 
		flawlessly, others to fail, with the only difference being that
		one had more than 1089 bytes of headers. Cleaning up the memory
		leak issues resolved it.  Though I'm always a bit fearful of
		such dissapearing bugs.

	- Cleaned up memory free'ing, used 'ccmalloc', nice little tool
		I recommend it to people trying to at least get a coarse
		view of what is being left out. I found that simply by fixing
		up the memory leaks I had, one of my "wierd" bugs went away
		very nice of it.

Tue May 07 2002 pldaniels@pldaniels.com
	- Added new function to MIME_headers object, to return the
		current status of the headers save status. This allows
		us to prevent opening up multiple FILE *'s on the same
		named _header_ file, potentially causing corruption
	- Removed the "WARNING: Possible pointer size being sent" debugging
		message.

Tue Apr 30 2002 pldaniels@pldaniels.com
	- Updated TNEF with patch supplied by Joe Gooch (Thanks Joe)
		corrects segfault when decoding certain TNEF's.
	- Added new function in FFGET.  FFGET_set_watch_SDL() tells FFGET
		to either be watching out for ^M^M sequence, or not to
		(1, 0 respectively).  This is required so that we can 
		prevent ripMIME from interpreting the ^M^M sequence if it's
		found in the email BODY as a SDL-Outlook exploit.
		Thanks to Elio de Santi for the mailpack which revealed this

Fri Apr 26 2002 pldaniels@pldaniels.com
	- Lots of fixes in the FFGET routines. Including the introduction
		of a two-stage FEOF status.  Initially we mark that we've
		reached the end of the /real/ file by flagging FILEEND, 
		then, when we actually try to read a new data block using
		FFGET_getnewblock() we flag FFEOF.  Previously we'd flag
		FEOF too early. This would cause corruption of various 
		attachments.

Tue Apr 23 2002 pldaniels@pldaniels.com
	- corrected memory leak causing "Killed" messages on large 
		mailpacks with lots of text/print-quotable attachments
Mon Apr 22 2002 pldaniels@pldaniels.com
	- Re-tuned the UUencode line detection sequence.  If anyone is
		aware of a /precise/ method to detect a uuencoded attachment
		in mailpacks, both as RFC and Outlook[stupid], please email
		me on pldaniels@pldaniels.com

Fri Apr 19 2002 pldaniels@pldaniels.com
	- Corrected FFGET_fgets() function which was returning NULL 
		one call too early.  Rather than sending back the last
		"partial" line read (end of buffer), it would assign
		the data to the buffer, but also return NULL, which 
		caused some programs to exit early from their reading
		loops.
		
		I'm actually quite surprised things even worked with
		this error... amazing what can slip by.


Sun Apr 14 2002 pldaniels@pldaniels.com
	- Corrected _headers_ file output location, which was defaulting
		to the execution dir, rather than the unpackdir

Fri Mar 08 2002 pldaniels@pldaniels.com
	--Released as 1.2.16.6

	- Added ability to decode "x-uuencode" files even though this
		type technically is not specified by the RFC's (one 
		should be using BASE64 or QuotedPrintable.

	- Corrected UUencode filename extraction from the header 
		triple

Thu Mar 07 2002 pldaniels@pldaniels.com
	--Released as 1.2.16.5

	- Fixed XAM_strtok() call which was occasionally failing if
		there was a delimeter at the end of the string.

Wed Mar 06 2002 pldaniels@pldaniels.com
	- Renamed zstrncpy.[ch] as zstr.[ch] as it's becoming a generic
		library with more than just the zstrncpy function in it.
		It now contains the zstrncat and zstrncate calls

Tue Mar 05 2002 pldaniels@pldaniels.com
	--Released as 1.2.16.4
	
	- Replaced all strncpy and strcpy routines with zstrncpy() calls.


Sun Mar 03 2002 pldaniels@pldaniels.com
	--Released as 1.2.16.3
	
	- Replaced file write routines in BASE64 and UUDEC decoders so that they
		use buffered write (reduces the number of fwrite() calls. This
		also gained another 10% of performance over direct write.

Sat Mar 02 2002 pldaniels@pldaniels.com

	- Replaced in MIME_base64_decode() the FFGET_fgetc() call with a direct 
		source code from the FFGET_fgetc() routine. Whilst this does mean
		that I will have to keep track of the changes I make in FFGET_fgetc
		and ensure that I port them across to the BASE64 decode routine, it
		does make for a good 10% gain in performance as shown on a 80Mb data
		test suite.

	- Converted Base64, Hexconv and UUDEC routines into static (compile time)
		fixed tables so that there isn't any need to build them each
		time the program is run. This saves us on startup time, although
		minimal, it does help.

Thu Feb 28 2002 pldaniels@pldaniels.com
	- Released as 1.2.16.2
	- Updated FFGET routines with patch as supplied by J.Gooch
	
Tue Feb 26 2002 pldaniels@pldaniels.com
	- Moved to 4 digit version numbers

	- Added f->FFEOF = 0 to the ffget_set_stream function.  Was causing
		an intermittent FEOF() status based on random data without
		it being there.

Sat Feb 23 2002 pldaniels2pldaniels.com
	- Committed ripMIME to local CVS

Wed Feb 20 2002 pldaniels@pldaniels.com
	- Releasing as v1.2.16
	- Cleaned up FFGET routines and added more comments.
	- Added new DEBUG mode selection routines.  Now debugging can be
		activated on a per-level basis, with (default) now there being
			*_DNORMAL == Debug normal
			*_DPEDANTIC == Pedantic debugging (lots of output)

		ie, in mime.c, there is now lines like

			if (MIME_DPEDANTIC) fprintf(stdout,"%s",line);

		This replaces the existing non-level sensitive routines of

			if (_MIME_debug) ....


	- HUGE stuff up.  Non-quotedprintable encoded text files were not
		being written out because I accidently left out the fprintf
		statement in MIME_decode_text() routine... REALLY bad MISTAKE.
		This was causing text files to be written out as 0-byte files.

		Fortuntely this error was picked up by the Xamime testing suite.

	- Releasing as v1.2.15 (I wonder if these releases will stop coming
		out so quickly)

	- _FINALLY_ fixed TNEF decoding, many thanks to Chea Chee Keong
		for the help provided, very valuable.

	- Releasing as v1.2.14

	- FEOF detection mishandling in MIME_decode_uu() cleaned up (uses
		the FFGET_feof() call rather than feof(), which (the feof)
		could prematurely return TRUE rather than when FFGET returns
		true, this is due to the fact that the FFGET routines will
		(on the last valid read) read up to the end of the file causing
		feof() to return TRUE, however, until all the data is read out
		of the FFGET buffer, it should not return true.  Hence, all
		routines using feof() were replaced with FFGET_feof()

Mon Feb 18 2002 pldaniels@pldaniels.com
	- Releasing as v1.2.13

	- CRCR logic cleaned up in FFGET_fgets() (thanks to Joseph Gooch for
		his help in resolving the logic routines)
	- Initialisation of ungetc flag in FFGET
	- Removed MIME detection debugging output
	- Added anti \0 poisoning filtering

Sun Feb 17 2002 pldaniels@pldaniels.com

	- Releasing as v1.2.12
		Although I've not had a chance to verify that ripMIME extracts all
		the possible \r explioits which can be used against Outlook/Express
		I am certainly confident it can extract most of them.  I've ran this
		ripMIME against about 600Mb of normal emails, all of which have extracted
		correctly in regression tests.

		I'm _STILL_ seeking more assistance to deal with TNEF decoding.  I have
		one mail pack which refuses to correctly extract, rather it results in
		the TNEF routines attempting to access data beyond the limits of the file
		(yes, it's protected against that, but it's still annoying!)

	- Added FFGET_fgets() true blank detection for reads, this is to
		deal with potential trickery as mentioned in bugtraq regarding
		fgets() falsely returning a single \n as though it was a blank line
		when really, it was just the previous fgets didn't have enough
		buffer space to include the last \n.

	- Corrected file Unique Nameing name cropping.

Fri Feb 15 2002 pldaniels@pldaniels.com

	- Made ripMIME report its version via STDOUT instead of STDERR

	- Changed "Decoding TNEF format" report to report to STDOUT instead
		of STDERR

	- Replaced entire file I/O routines to use FFGET, which now supports
		fgets(), fgetc() and raw-get routines.  This was done so that we
		could (originally) detect the presence of an offending <CR><CR>
		double byte in the headers of some emails which may be used to
		exploit Outlook's interpretation.

	- Fixed zstrncpy which was copying one byte too few when a strncpy
		was done.  This was causing filename crop problems. -NOTE- this
		was primarily due to the fact that the size of buffer specified
		was inclusive of the \0 terminator.... as apposed to an actual BUG

	- Added into MIME_headers the ability to decode "Content-Location"
		to extract filenames from the new Microsoft MHF formatted emails
		(basically it's a bundled together WWW page HTML + images)

Thu Feb 14 2002 pldaniels@pldaniels.com
	- Added header detection of double CR exploit usable against
		MS Outlook (This feature is more of use to programs which
		actively filter against exploits such as Inflex/Xamime

	> Need more help with TNEF decoding!!!!!

Wed Jan 30 2002 pldaniels@pldaniels.com
	- v1.2.11
	- Added ability to decode MULTIPLE UUEncoded attachments within the
		same body of text.

Tue Jan 29 2002 pldaniels@pldaniels.com
	- v1.2.10
	- Corrected mistaken use of 'n' count in UUdecode byte count resulting
		in excessive sized files (with useless data)
	- v1.2.9 released
	- Removed non-used functions MIME_getchar() and MIME_insert_X_header()
	- Added UUDecode routines
	- Added --no_uudecode option

Mon Jan 28 2002 pldaniels@pldaniels.com
	- v1.2.8 released

	- Patch suppled by Tim J. Robbins for buffer-smash as specified by
		BugTraq applied
Thu Nov 15 2001 pldaniels@pldaniels.com
	- Corrected potential buffer overrun situation in raw-decode mode
	- Corrected buffer overrun with MIME_headers which allowed massive
		sized filenames to cause segfaults (Thanks to Tristan Aston
		for bringing this to my attention)
	- Various code cleanups and extentions to the mime.[ch] files to
		deal with new advances in Xamime (http://xamime.com)

Fri Nov 09 2001 pldaniels@pldaniels.com
	- Replaced several sprintf()'s with snprintf
	- Set a global _MIME_STRLEN_MAX length to 1023 and used
	 	with snprintf() to avoid buffer-overflows as reported by
		Tristan Aston (Solaris 8).
	-
Mon Nov 05 2001 pldaniels@pldaniels.com
	- Resolved TNEF segfault issue with some winmail.dat packs which do
		not seem to conform to the standard which we have for the current
		tnef decoding module.  Some winmail.dat packs still dont unpack
		but that's an issue with the MAPI data I believe (anyone want to
		help?)
	- Added "RAW" format for encoding, RAW basically is a slower form of
		read/decode, but, it will at least correctly (??) save non-format
		specified files.  RAW decoding routines are kept in rawget.[ch]
		which is nothing more than a specific version of fgets().  This may
		change later [back to fgets()].  The difference is that rawget
		returns how many bytes it read, because the data returned by a
		binary file may contain \0's which would otherwise fool length
		testing function calls (ie, strlen()) into indicating there are
		less bytes than what there really is.  This could be resolved by
		performing a test for the \n or \r, but it's more overhead.
	- Added patch from Xerox to correct occasional issue with non
		constant BASE64 line lengths (previously used to determine when
		the encoding had finished)

Fri Oct 26 2001 pldaniels@pldaniels.com
	- 1.2.5 released
	- Removed mailbox "\n\rFrom " line detection routines out of text
		decoding section, created new function MIME_unpackmailbox()
		which will break apart the mailbox email at at time and feed it
		to MIME_unpack()
	- [mime.c, tnef.h, tnef.c ] Fixed issue with TNEF decoding segfaulting
		if -d param was used in ripMIME
	- [config.h] Cleaned up the __BYTE_ORDER mangling issue by renaming
		as __TNEF_BYTE_ORDER
	- Added numerous debugging messages available by using --debug on
		ripMIME
	- [tnef.c] Removed extensive deadcode from tnef modules
	- [tnef.c] Removed compressed RTF decoding
	- Improved error reporting and messages

Thu Oct 18 2001 pldaniels@pldaniels.com
	- 1.2.4 released
	- Added TNEF decoding ability through use of modified tnef2txt
  		library as created by Brandon Long (blong@uiuc.edu), April 1997.
		As yet, I have not been able to successfully contact this person.


Tue Oct 09 2001 pldaniels@pldaniels.com
	- Updated MIME Boundary stack "cmp" operation so that it pops off
		any boundaries -above- the detected one.  This is because
		technically, all boundaries should be nested in their occurances.
		This is a hoped fix for most of the .eml attachment extraction
		problems that were occuring.

Tue Sep 11 2001 pldaniels@pldaniels.com
	- Cleaned up source and added in more comments
	- Released v1.2.3

Mon Sep 10 2001 pldaniels@pldaniels.com
	- changed the detection string for quoted-printable from
		"quote-printable" to "quoted-printable".  A small, but oh so
		painful mistake!
	- changed boundary line detection in header files to improve the
		detection and extraction of multiply-nested mailpacks

Sun Sep 9 2001 pldaniels@pldaniels.com
	- Improved name= parameter discrimination when headers have mixed in
		<META ... name="..."> components.  Now correctly decodes name= when
		the headers have a <ID 23523535255> type identifier.
	- Changed XAM_strncasecmp and strlower to use inline/macro version of
		isupper / tolower

Wed Aug 29 2001 pldaniels@pldaniels.com
	- Added ability for ripMIME to uncompress BASE64 encoded inline
		mailpacks (these are like forwarded emails, but they've been
		coded up in BASE64 format! I kid you not!)

	- Added Handling for Quoted-Printable filenames

Fri Aug 24 2001 pldaniels@pldaniels.com
	- Added recursive calling if mailpack contained encoded mailpack
		ie, when we get a named rfc822/message type attachment.

	- Inserting new code from MIME_headers.[ch] which will do explicit
		analysis of the headers in a single-line stream format. Makes
		things far far easier to deal with later.

Tue Aug 21 2001 pldaniels@pldaniels.com
	- mime.c: added explicit handling of mailbox format (/var/spool/mail)

Fri Aug 03 2001 pldaniels@pldaniels.com
	- mime.c: added --no_paranoid option for filename filtering

Wed Aug 01 2001 pldaniels@pldaniels.com
	- mime.c: MIME_test_uniquename(): used strrchr rather than XAM_strtok()
		to locate the last '.' seperator for filenames. Fixes problem with
		misnaming of multiple .'d filenames.

Tue Jul 31 2001 pldaniels@pldaniels.com
	- XAM_strtok.c: Corrected end-of-tokens bug in XAM_strtok(), would
		return a null string when it should return the remainder of the
		string.
	- mime.c: added additional method for renaming of file
			--prefix
			--infix
			--postfix
	- mime.c: added "--unique_name" function to preserve existing filenames
		when decoding (ie, no clobbering)

Tue Jun 12 2001 pldaniels@pldaniels.com
	- mime.c: replaced strncasecmp() with XAM_strncasecmp() to permit
	portability to sysV and others
	- mime.c: replaced random() call with rand()
	- Added early exit routine for base64 if it detects two consecutive
	hyphens ('-'), this is needed in order to deal with 1-in-1000
	situation where a small file is encoded, and there is no separating
	double CR\LF between the end of the base64 encoding, and the new
	boundary line.


Sun Jun 03 2001 pldaniels@pldaniels.com
	-Release as 1.0.2
	- Fixed occasional issue of a second attachment decoding to 57 bytes
		in a BASE64 decode, added extra test routine for the length
		comparisons so that a length of 0 could not be accepted.
		MIME_decode_64:
				else if (p_length == -1) {
++					if (t_length > 0) p_length = t_length;
				}

	- Replaced strtok() calls with own XAM_strtok() from the XaMime project
		NOTE- This strtok call DOES NOT compress consecutive delimeters like
		strtok. The behaviour of XAM_strtok() is more like that of strsep().

		The replacement was required to ensure thread-safety, as strtok() is
		far from being thread-safe (it's bad enough when you 'accidently'
		nest strtok() calls!. XAM_strtok() can be safely nested.


Mon May 21 2001 pldaniels@pldaniels.com
	- Fixed issue of ripMIME not successfully extracting a RFC822
		"embedded" pack if it started with "From" or ">From"

Mon May 14 2001 pldaniels@pldaniels.com
	- Replaced fgetc() calls in BASE64 decoding routine with a set of
		routines as defined in the new module ffget.[ch].  These new
		routines read in the MIME encoded file line at a time using
		fgets() and then feed out the file char at a time using the call
		FFGET_fgetc(). Speed improvement is nearly DOUBLE thanks to this
		routine (the more BASE64 decodes you do the better.

Mon Apr 02 20:54:45 EST 2001 pldaniels <pldaniels@pldaniels.com>
	- Added new var, _no_nameless[= 0].  If set to something other than
		zero, then any attachments without an internally specified filename
		will be removed (After processing)
	- Added CLI param to turn on no_nameless.

Wed Mar 28 14:26:06 EST 2001 pldaniels <pldaniels@pldaniels.com>
	- Added patch for filename cleaning. Fixed patch to not overwrite '.'s
	- Put MIME_clean_MIME_filename() into action, hopefully ISO filenames
		should be supported without kludgy characters now.

Tue Mar 27 21:39:24 EST 2001 pldaniels <pldaniels@pldaniels.com>
	- Added MIME_get_attachment_count() which returns how many filename'd
		attachments were found.
	- Added in _current_line for the purpose of debugging, good for being
		able to tell where ripMIME is through the reading of a mailpack
	- Added "default" encoding method as being PLAINTEXT in the event
		that there is no encoding format handled specifically (Thanks to
		Hans Arder for supplying mailpack to display this)

Tue Mar 21 <pldaniels@pldaniels.com>
	-PR5
	-a debugging line in the collect_headers fn was causing potential
		encoding-format loss due to absorbing the vital Content-Type
		line.

Fri Mar 16 <pldaniels@pldaniels.com>
	-Prerelease 4
	-Implemented a stack based boundary layer detection system to
		allow for nested in-line attachments, as typically generated
		by drag'n'dropping files to email
	-ISO filename decoding commenced, needing more examples of mailpacks
		with ISO encoded filenames!
	-Created the "daily update" version of ripMIME, to follow suit with
		the new Inflex style of releases.


Tue Feb 13 <pldaniels@pldaniels.com>
	-Prerelease 3
	-Fixed up some quoted-printable glitches (pack supplied by
		James Cownie, thanks!)

Tue Jan 30 00:49:51 EST 2001 worker <worker@inflex>
	-Prerelease 2
	-Removed tmpnam() call out of MIME_XHeader() function, not that this
		 is actually ever used by ripMIME (its part of the cInflex suite)
		 thanks to both Dave DeMaagd and Justin (SuidAfrika) for pointing
		 this out to me.
	- Corrected directory naming spec so that there aren't double //'s
		(Thanks to James Cownie for preliminary notification)

	-Changed the 'From' line detection routine to work with both un-read
		(ones with just 'From joe@xxx.bbbb') as well as READ emails (ones
		with '>From joe@xxx.bbbb'). Thanks to Sven for pointing this out
		(Im too used to using pop3-pickup ;) Also allowed the FROM line to
		be detected in the MIME_find_next_header() function.

Sun Jan 28 15:10:49 EST 2001 worker <worker@inflex>
	-v1.0.0 PreRelease 1
	-Added in multiple-email (sequential) and nested (forwarded) email
		attachment extraction support (painful!)
	-Passed ripMIME through several thousand "real life" emails to
		verify extraction ability
	-Modified flag passing structures to contain most in struct _MIME_info
		(required to get nested emails to extract correctly)
	-Allowed user to turn on/off each logging option (syslog or stderr)
	-Tried cleaning up comments a bit
	-Added in more _debug() calls, making watching the process of decoding
		via syslog() a bit easier.

Fri Jan 12 11:00:12 EST 2001 worker <worker@inflex>
	- Added patch supplied by Rolf to also counter for boundary specifiers which dont' have
	enclosing "'s

Tue Jan 09 13:38:16 EST 2001 worker <worker@inflex> (0.1.10)
	-Added ability to handle mailpacks which had no CR/LF separator after the end of BASE64
	decoding (Thanks to Hans Harder for suppling the mailpack!)

Sun Jan 07 00:02:19 EST 2001 worker <worker@inflex> (0.1.9)
	- Removed error reporting code from mime.c which said that end-of-file had been reached,
	this is no longer required as we correctly handle plain-text (into the _headers_ file)
	-Considering to release as v1.0.0

Sat Dec 30 23:47:18 SAST 2000 worker <worker@inflex> (0.1.8)
	- Added print-quotable decoder
	- release 0.1.9

Thu Dec 28 22:13:56 SAST 2000 worker <worker@inflex>
	- Handler for mailpacks WITHOUT a boundary specified (single file emails)
	- Forgot to change the version indicator in 0.1.7

Sun Dec 24 23:32:09 SAST 2000 worker <worker@inflex>
	- Modify base64 decoder to allow a _MAXIMUM_ of 76 chars on the line.
	  and capable of any length of line less than 76 chars.
	 - Release 0.1.7

Fri Dec 22 23:02:57 SAST 2000 worker <worker@inflex>
	Commenced fixing ripMIME for new style of MIME headers which have multiple
	statements on a single line.

Sat Nov 25 17:45:45 SAST 2000 worker <worker@inflex>
	version 0.1.6
		-Applied patch from Matthew to allow input from STDIN
		-Added feature to allow headers to be dumped to a file (for picking up
			kak virus etc)
		-Added more comments to source code

Thu Nov 23 18:30:20 SAST 2000 worker <worker@inflex>
	version 0.1.5
		-Corrected EOL detection for 76 char MIME encodings

Thu Nov 23 18:30:20 SAST 2000 worker <worker@inflex>
	version 0.1.4
		-Corrected End of encoding MIME breakage
		-Added better -DDEBUG reporting via syslog()

Mon Oct 30 09:45:04 SAST 2000 worker <worker@inflex>
	version 0.1.3
		-Added input parameters to allow for more control
		-Added ability to specify own text-only filename prefix

Mon Oct 30 00:46:05 SAST 2000 worker <worker@inflex>
	version 0.1.2
		-Added code to remove zero byte files.

Sun Oct 29 18:16:46 SAST 2000 worker <worker@inflex>
	version 0.1.1 released.
