# # $Id: HISTORY.txt,v 1.5 2004/03/01 23:59:56 fp Exp $ # PROGRAM HISTORY --------------- (remember that all _dates_ are dd.mm.yyyy) 0.1 (15.06.1994) ----- First release. Took less than a week of coding. Most features should work now. All files I encountered can be decoded properly. Some special cases, however, are still untested. This version was updated two or three times without upgrading the version number because that were just minor changes. 0.2 (23.06.1994) ----- DOS support! After getting some requests for a DOS version, many portions of the code have been completely rewritten so that the file data is not loaded into memory. Instead, just an index is saved. Added +e option to select file extensions. Added +i option to disable user questioning. Some special cases to evaluate the part no. of the subject line added Automatic uncompress / gunzip (need to have them installed) Tar file handling - extract files right out of a tar archive. This is done from uudeview itself, so you won't need an external tar. 0.3 (30.06.1994) ----- Getting smarter every day. After I found some postings with spelling mistakes in the subject line (namely "something.zip" instead of "something.arj"), I began to program "Smart Part Merging System" (SPMS (R)). It detects that the parts of "something.zip" are just the missing parts of "something.arj" and merges both files. This feature will still need a lot of maintenance, since there are a lot of special cases. Added a ton of features. Now you can list the files or enter commands to do anything with them (you can enter "xv $") to watch the file. Installed a signal handler for SIGINT (Ctrl-C). If the program was interrupted by the user, it left LOTS of temporary files in /usr/tmp. They will now be cleaned. Again, the user interface was changed. I did that in 0.2, so why not again in 0.3. I hope you'll agree it's a bit better now. The program now checks if gunzip has failed (it tests if the resulting file has less than 2 bytes). Fixed a bug with filenames that contained spaces at the end. Linked files in tar archives are now ignored. In 0.2 each file was decoded before the user was prompted what to do. This was quite slow on some machines. Now the files are only decoded on request. 0.3.42 -------- I'm quite lazy with documenting all the changes I made to the source code. I hope I will keep online this time. To do this, I have invented the patch- level number. Since I have made a lot of changes to the original 0.3 release, I start with patchlevel 42. 0.3.43 -------- - gets suspicious if it finds multiple begins/ends within the same post and opens up a new file record - Treats "BEGIN -- CUT HERE" line exceptionally, because it frequently looks like valid uuencoded data and fooled the program. The 4-line-safety barrier didn't catch because the real data followed immediately. 0.3.44 (25.01.1995) -------- - added lots of patches to allow for Mime Base64 decoding ... mostly because I want to decode this Lion King MPEG from alt.binaries.multimedia 0.3.45 (29.01.1995) -------- - added XX decoding scheme. Was really simple after having to change every- thing for the above MIME stuff anyway. Just another decoding table. Hope it works. 0.3.46 (01.02.1995) -------- - included groundworks for desperate mode. I don't know -- should I leave the '-d' command line option out? 0.3.47 (03.02.1995) -------- - written my own more function. previously, I just called system(), but this was (a) unstable and (b) didn't work in QuickWin - included '(i)' action to show file info; either part 0, or part 1 up to the begin line - desperate mode finished. Moved the original '-d' (decompress) option to '-x' (didn't use it anyway, and needs major rewriting) and replaced it with new desperate option 0.3.48 (04.02.1995) -------- - wrote an case-insensitive string compare function. Have migrated the extension detection to case-insensitivity - added some code to detect some common file suffixes (jpg, gif etc.) added SPMS check: parts of files will not be merged if they have different but correct suffixes (if one of the files' suffix is not recognized, it might just be spelled wrong, so this doesn't prevent merging). This should stop SMPS from merging together complete junk. - generalized Unix Makefile. Now I only have to change a version number in one place (well in three places if I consider DOS&Windows with other make files). - added multiple passes to SMPS. In first pass, only "exact fits" are merged, in second pass only files with minimal differences, in third pass, everything - stripping some boring headers in file (i)nfo - now it should also accept files with less than 4 lines of data - finally found the 'bug' that declared some final lines as invalid -- the encoder has stripped unnecessary chars. Added more checks ... 0.4 (06.02.1995) ----- - After getting no bugreports for a few weeks (either nobody uses the program or it does work after all), I renamed 0.3.48 to 0.4. There is so much dif- ferent from the original 0.3 that I simply need to indicate these changes to users. And besides, it's my birthday :-) - Deleted "ALPHA" indication from the windows version. Now fully integrated. - moved MIME check in front of UUdata check. Strongest semantics first. 0.4.1 (08.02.1995) ------- - Added additional check for a part number on the subject line: "test.gif 3 of 4" was detected to be 4, now done correctly. 0.4.2 (10.02.1995) ------- - bugfixed uudeview.c:IsKnownExtension() which would core dump on some systems due to NULL read access. Thanks to J. Wilkinson, for pointing out the problem. This isn't fatal for DOS, and also shouldn't be fatal in Windows. 0.4.3 (14.02.1995) ------- - some people couldn't compile the Unix version because I used two non-standard string functions, strrstr() and strdup(). Thought they were defined everywhere. Now I've written them on my own. - moved _FP_strnicmp() to uuutil.c 0.4.4 (24.02.1995) ------- - trimmed comments in header files because some compilers warned about "nested comments" - fixed annoying bug in CheckGlobalList() that caused infinite loops and may also have caused core dumps if more than 98 parts were missing from a posting - added another clause to the detection of a part number on the subject line after getting a file by the name of abc-1019.gif, where a part num- ber of 1019 was detected 0.4.5 (02.03.1995) ------- - Added workaround for Netscape, which completely messes up encoded data on some setups. It replaces &,<,> by their html equivalents and occasio- nally inserts some junk HREF links. Now whenever an invalid line is found, it is NetscapeCollapse()d, in the hope it's decodeable afterwards. 0.4.6 (11.04.1995) ------- - wow, I just see that it's been a long time since the last bugfix. I guess it is indeed getting better :-) - UUdeview would ignore files with double-spacing (one line of data followed by an empty line). Now, all empty lines are ignored. I just hope this doesn't add problems elsewhere. Thanks to Gary for this one. - a slight bug in the Base64 detection made the program fail to pick up the destination filename when quoted 0.4.7 (07.05.1995) ------- - the mime detection was looking for the "Content-Type" message. Now, this tag is accepted case-insensitive. - if no trailing lines were at the end of a Base64-encoded file, some data was written twice, resulting in trailing garbage data. 0.4.8 (22.05.1995) ------- - all string compares are now case insensitive, especially because I found mime headers in all kinds of variations - small bug fixed that caused uudeview to ignore some files where the first part didn't have encoded data - included checking if files exist, prompting the user whether it shall be overwritten. suggested and coded by Kevin B. York - new: the encoding engine! incorprorated into the launcher in Windows, for Dos/Unix, it's in the external 'uuenview' program. 0.4.9 (07.06.1995) ------- - allows an 'end' after the encoded data with only an _empty_ line inbetween. Previously, I expected a valid encoded line with zero data, meaning that the single character on that line is '`' (UUE) or '+' (XXE) 0.4.10 (14.06.1995) -------- - funny bug fixed: if the decoder found a valid UUencoded line in a supposed MIME-data file, it decoded the single line and exited. In my case, a MIME header triggered this. - fixed bug with more than one MIME-encoded file in a single message. - serious bug fixed when overwriting an existing file: I had forgot- ten O_TRUNC when opening the file, causing some undefined behavior. 0.4.11 (16.06.1995) -------- - renamed all variables 'this' and 'new', as some C++ compilers don't like using these keywords as names - renamed the variable 'inpfile' in uudeview.c:more(); I had a type of the same name (ec@matufia.sp.TRW.COM) 0.4.12 () -------- - more smartness (although I now can't remember where, probably everywhere) - fixed problem with multiple MIME attachments in a single mail - can now decode news articles from lynx, which were messed up similar to Netscape news files, only worse. - one appearance of strdup() in uuio.c slipped through. Now replaced by _FP_strdup() - Instead of having to choose to rename or overwrite existing files each time, you can now enter 'a' once to overwrite them all. - The Ultrix C compiler ignored hex escape sequences, which were used in uuenview.c for CRLF. Now they're in octal. - not so picky if the last line is longer than expected. some encoders (more than one!) failed to let the last line end where it was supposed to end. - complete rewrite of uuenview. It can now email and post files direcly. For the purpose of posting, a mini inews program, written by Steven Grady, , is included in the distribution - finally: manual pages! And make install works as well as make install.man! Thanks to all the people who have been bothering me for months :) - uudeview and uuenview can now behave similar to uudecode and uuencode if called like that (ln -s uudeview uudecode). Of course, you don't loose any smartness. My ultimate goal is to replace these outdated tools. - attempt to enforce stronger subject-line semantics. uuenview prints the part numbers in brackets (partno/numparts) and the file name in hard brackets [ filename.tar.gz ], and this is what the decoder looks for first. 0.4.13 (20.10.1995) -------- - after sending out so many 'beta' versions of 0.4.12 and being asked whether there's a new one available, I've decided to skip an official 0.4.12. - Scan speed greatly improved. And if you're sure you only have one article per file, you can use the undocumented "-f" option for even more speed. But then everything becomes quite unsafe, as incomplete files are only detected when decoding. - don't ignore RETries - reworked most documentation, and rearranged the rest. All packages now only include the documentation the reader really needs - Win version includes a new version of the Launcher, compiled with the new encoding routines, and also remembering its screen position and size - Oops, the Netscape repair code was partially broken and needed some repair itself. - xxdecoding was broken because of over-tolerant uudecoding - uudecoding was broken because of over-tolerant uudecoding :( 0.4.15 (20.01.1996) -------- - Implemented my own version of fgets() that allows to transparently read lines terminated either with LF (Unix), CRLF (DOS) or CR (Mac). Sadly, it's slower than the original. - in previous versions, I have very much relaxed the checking for uudecoded lines (valid_data()). Now I only allow the less strong code (meaning, allow the data look more weird, more off the specs) if I'm sure it actually _is_ uuencoded data. This should work in all cases because it was usually only the last line with was "erroneous" - included option '-b' to let part numbers in [] take precedence over () this only affects the kind of brackets uudeview looks to find a part number _first_ - fixed problems with multiple MIME attachments - got rid of the 'Ignore Replies' switch. It caused lots of confusion and didn't really help anything. - included option '-f' for fast scanning. Only works if each input file contains at most one article. Many sanity checks cannot be performed because much less data is gathered, thus many invalid files may get processed. - added e(x)tract command; but (d)ecode stays default. 0.4.16 (21.01.1996) -------- - a tiny typo, which was introduced for debugging purposes but not removed, broke 0.4.15. This was especially problematic for the Windows version. 0.4.17 (09.02.1996) -------- - once again a stupid 16 bit problem introduced in 0.4.15. In uunconc.c: uunconc(), the variable pppos, used to remember the file position, was declared as int. Because of this, on 16 bit systems, it looped over and over, but the file pointer never reached maxpos :-( This patchlevel was only released as uudv[dw]04h but not as Unix version because 32 or 64 bit systems weren't affected. 0.4.18 (not publicly released) -------- - this is an intermediate beta test version. With all the changes going on, I expect everything to settle into a 0.5 release sooner or later. - got rid of some bugs - Base64-encoded lines can now have arbitrary length (not limited to multiples of four) - support for BinHex decoding added. No encoder yet. - complete re-layout of the code. All the encoding/decoding stuff has been moved into a seperate, system-independent library, while the enveloping standalone programs uuencode and uudecode are just front- ends to this library. - another front-end has been added, uutcl, which makes the library functions available to Tcl/Tk programs - A Tcl/Tk script, xdeview, uses these functions and provides a graphical frontend - support for decompressing and tar files has been removed. They didn't work reliably, and aren't the job of a decoder anyway. - BinHex and Base64 lines may have space characters at the end of the line 0.4.19 (not publicly released) -------- - More changes everywhere. Fixed another problem with Base64 files. - Improvements everywhere :) - Added progress meter to the decoder 0.5.0 (07.06.1996) ------- - Well, thought I have to release the stuff sooner or later. - Fed the code into CVS for better revision control. 0.5.1 (10.06.1996) ------- - Fixed problem with multiple tiny Base64 files in a single message. 0.5.2 (15.06.1996) ------- - Cleaned up some code; now using size_t parameters for fread() and fwrite() and such. - Fixed problem with short BinHex files. - Use the initial and trailing colon `:' of BinHex files as `begin' and `end' markers. - Only encode to message/partial embedded messages if we really have more than one part; otherwise encode directly to toplevel MIME body. 0.5.3 (23.06.1996) ------- - Complete rewrite of the scanning routines, which have been moved to uuscan.c and grown into the largest chunks of code. - Mime files are properly treated with a pretty complete Mime par- ser. Outside of Mime messages, the scanner falls back to the old behaviour. - Offers to `decode' plain text (and quoted-printable text) files with -t option. - Intermediate preview release. 0.5.4 (21.07.1996) ------- - Rewrote encoding functions. The system-dependent stuff has moved to the outside of the library. - Minor changes not affecting the frontend. 0.5.5 (21.08.1996) ------- - Bugfixes: - Sometimes, the file pointer wasn't properly rewound to the beginning of the headers after bumping into them. - The Binhex RLE decompressor produced garbage with repetition counts greater than 127 (which were expanded into negative integers) - Stripping the last CRLF of a plain-text message was fatal if the piece was really an unhandled message/multipart part. 0.5.6 (28.08.1996) ------- - The Mime-Id buffer in uuencode.c:UUE_PrepPartial() was too small, causing it to be partially overwritten - Added code to read part number and file name from UUEnview-Style headers. Especially important for filename detection with pure Base64. I consider this an ugly hack, but users call for it. 0.5.7 (04.09.1996) ------- - Added "attach" option to uuenview: read a msg from stdin and attach one or more files using proper MIME multipart/mixed style. - Fixed configure script: we might need $x_includes for - Fixed rules for "make install" 0.5.8 (13.09.1996) ------- - Fixed output filename when encoding dotfiles - Fixed uudecode compatibilty mode (would crash when reading stdin) - Fixed bug with long header lines (was actually a bug in _FP_strncpy) - Fixed bug when mailing directly from uuenview. The recipient address length must be added when composing the command. - Added configure options --enable-sendmail and --enable-inews 0.5.9 (29.09.1996) ------- - Fixed percentage display for >20Meg files on 32bit systems, where 100*fsize becomes > MAXINT ... - Fixed problem with "--- cut here ---" lines that were misinterpreted as MIME boundaries. - A user tried to decode a file with an early truncated MIME message and another message later with the same boundary. Consequently, all data inbetween was ignored. Added check for a Content-Type with the same boundary when scanning a subpart. - Allow to specify more dumbness on UUDeview's command line to ignore subjects as well as part numbers. Fixed a problem with dumb mode as well. 0.5.10 (01.10.1996) -------- - Plugged memory leak in uucheck.c:PreProcessPart() 0.5.11 (03.10.1996) -------- - Added workaround for broken uuencoded files sent from MS Exchange. 0.5.12 (23.12.1996) -------- - Fixed bug with aborted decoding runs that the tempfile was deleted, but UUFILE_TMPFILE was still set. - Make uudeview return a more or less sensible return value: 0 if all files were decoded successfully, 99 for miscellaneous errors, 2 if all files failed to decode, or 3 if some files were decoded okay and others failed. - Added -n option to uudeview to not print progress bars. - You can now set global options for UUDeview in the UUDEVIEW environ- ment variable. Options set there may be overrridden on the command line. - Some tweaking to make some troublesome input files (for example with interleaved blank lines) decode. - Fixed bug that caused erroneously decoded data when UUencoded data looked like Base64 (because of the overlapping alphabet) 0.5.13 (09.01.1997) -------- - Fixed bug in uuscan.c. - Fixed another bug in uuscan.c which happened when a filename on the Content-Type line happened to contain a header keyword. - Fixed infinite loop when trying to descramble Netscape data; in one place we were looking for 8.0 - Do not use "dangerous" gets in minews, replace by fgets - If the file looks like MIME, be more strict when scanning "text/*" parts for encoded data. - Add +o option to never overwrite files (useful in non-interactive mode) - Add -c option to autoclear input files from which anything was decoded. Use with care - UUDeview does not care about anything else in that file. - Add -z option for improved MIME compliance on MIME messages. - Improved encoding detection, it should now be less sensitive to data that looks both like uu and Base 64. - Add -r (Reply-To:) and -f (From:) options to uuenview - Support encoding as quoted-printable - Support "encoding" as plain text - Add -t and -q options to uuenview for that - Make the encoding to be used depend on the last -ubxtq option, so that you can send plain text and binary attachments on the same command line. - Make uuenview read the $UUENVIEW command line option - Tag attachments as "text/plain" if plain text or quoted printable is used and no other mime type is appropriate. - Recognize a boundary when scanning a file in "freestyle" mode. This is similar to the AOL handling above. 0.5.16 (26.08.2001) -------- - fix handling of "x-uue" encoded MIME attachments - bug fix for file renaming 0.5.17 (06.03.2002) -------- - fix handling of quoted parameters - some support for yEnc encoding 0.5.18 (02.04.2002) -------- - fix for yEnc files in UUInfoFile - patch by Matthew Mueller: - add CRC generation and checks for yEnc - accept yEnc files where the tab character is not escaped - improved error checking for yEnc files 0.5.19 (07.10.2003) -------- - UUDeview: check validity of save path upon 'p' (in interactive mode) (Chris Hanson) - patches by Matthew Mueller: - check return code of fclose() after writing target file to detect e.g. disk full errors - check for errors reading the input file - Get suspicious about potentially uuencoded data if the line length varies - write incomplete files, hoping for some block-level recovery - Add a UULoadFileWithPartNo function, in case a user of this library is certain of the part number and doesn't need to trust UUDeview's heuristics. - fix a bug in the historic Netscape fixing code, which probably should be removed altogether sometime anyway (see log for 0.4.5 above) (Michael Newcomb) - UUDeview: Add an alternative autorenamer that adds a unique sequence number before the first dot, keeping the extension intact - UUDeview: If the filename is "." or "..", replace the first dot with an underscore to not conflict with the directory names - finally implemented RFC 1522 header decoding. The charset is ignored, though - fix some problems with decoding message/partial messages - In violation of RFC 1521, allow the [;] characters in a token. The Klez virus does that, and people who feed their virus scanners with the output from UUDeview would like to catch it. - UUDeview: replace some questionable punctuation characters in filenames with underscores. The current list is {<|">} - Stop tinkering with CFLAGS in ./configure; remove --disable-optimize. Use 'CFLAGS=-O ./configure' for non-debug builds. 0.5.20 (01.03.2004) -------- - Stop tinkering with CFLAGS in ./uulib/configure - fix bug in inews/inews.c: fgets doesn't discard the final newline (Yuri D'Elia) - fix bug in parsing of header lines - fix fgets to accept lines that are exactly of the maximum length - fix two buffer overflows