========================================
PLOP and PLOP DS 4.0 (December 10, 2008)
========================================

- 2008-12-04 (bug #2019)
  Changed the sign mini samples to use a new input document (invoice.pdf).

- 2008-12-04 (bug #2002)
  Replaced the demo certificates with new ones which include the keyUsage
  extension and are valid unitl 2011-12.

- 2008-11-28 (bug #2009)
  Rewrote the .NET wrapper to achieve the following goals:
  - allow builds with Visual C++ 2005 or newer
  - build 64-bit versions of the .NET binding
  - conform to the new destructor/finalizer/dispose semantics introduced
    with Visual C++ 2005.

- 2008-11-24 (bug #2013)
  Added the insertxmp mini sample for all language bindings.
  
- 2008-11-24 (feature #734)
  Added PKCS#11 support for smartcard readers with an integrated keyboard,
  and cleaned up PKCS#11 error handling and messages.


===========================================
PLOP and PLOP DS 3.1SC3 (November 11, 2008)
===========================================

- 2008-11-11 (bug #1504)
  Changed the memory allocation strategy to avoid a large number of realloc()
  calls with small amounts of memory, which can result in excessive memory
  usage on some platforms, especially z/OS with USS.

- 2008-11-11 (feature #655)
  Added support for response files in the command-line tool.

- 2008-10-30 (feature #706)
  Implemented the "keyusage" suboption of the "sign" option of
  PLOP_create_file(). Reorganized the PKCS#11 code and cleaned up memory
  management.

- 2008-10-20 (bug #1947)
  PLOP created invalid signatures with ACS smartcards because the object
  identifier for the SHA-1 message digest was missing from the signed data.
  This problem did not affect InfoCamere cards.


==========================================
PLOP and PLOP DS 3.1SC2 (October 16, 2008)
==========================================

- 2008-10-16 (bug #1946)
  PKCS#11: Fixed a crash when applying multiple signatures with a smartcard.

- 2008-10-15 (bug #1945)
  PKCS#11: Fixed a crash when applying a signature with a smartcard while the
  card reader did not contain any card.

- 2008-10-13 (bug #1929)
  Rewrote the hellosign mini sample to use the new PVF functions instead of
  the deprecated PLOP_open_document_mem().


==========================================
PLOP and PLOP DS 3.1SC1 (October 13, 2008)
==========================================

- 2008-10-10 (feature #706)
  Added support for smartcards with the "engine=pkcs#11" suboption of the
  "sign" option of PLOP_create_file().

- 2008-10-09 (bug #1933)
  Loading certificates with the new PVF feature resulted in a crash when
  using the builtin signature engine.


==========================================
PLOP and PLOP DS 3.1RC5 (October 03, 2008)
==========================================

- 2008-10-02 (bug #1858)
  Emit a more instructive error message when platform-specific options are
  used on the wrong platform.


==========================================
PLOP and PLOP DS 3.1RC4 (October 02, 2008)
==========================================

- 2008-10-01 (feature #723)
  Implemented the PVF feature with PLOP_create_pvf() and PLOP_delete_pvf().
  This deprecates the PLOP_open_document_mem() API function.

- 2008-09-26 (bug #1865)
  PLOP_create_file() now returns an error for invalid XMP supplied to the
  "metadata" option.

- 2008-09-24 (feature #715)
  Implemented new pCOS pseudo keywords for handling PDF 1.7 Adobe Extension
  Level 3: "extensionlevel", "fullpdfversion", "pdfversionstring".
  The dumper samples are adjusted to use the new pcos objects for reporting
  the PDF version.

- 2008-09-20 (bug #1849)
  Fixed problems regarding the synchronization of document info entries and
  XMP properties; this could affed PDF/A conformance of the generated output.

- 2008-09-01
  Updated the CE (external crypto) interface for hooking up client-supplied
  crypto functions for the digital signature. The CE interface works only
  with a custom build of PLOP DS.


=========================================
PLOP and PLOP DS 3.1RC3 (August 01, 2008)
=========================================

- 2008-08-01 (bug #1837)
  Reject the following keys for the "docinfo" option of PLOP_create_file()
  to thwart attempts at creating pseudo ISO standard output by inserting the
  respective identification entries for PDF/X and PDF/E:
  GTS_PDFXVersion, GTS_PDFXConformance, ISO_PDFEVersion

- 2008-07-31 (bug #1841)
  The PLOP command-line tool did not correctly treat the combination of
  the --outfile and --info options.

- 2008-07-26 (bug #1832)
  Properties outside the set of predefined XMP properties could not be
  overridden with user-supplied XMP (option "metadata"). The modified
  configuration gives priority to the user-supplied property values.


=======================================
PLOP and PLOP DS 3.1RC2 (July 16, 2008)
=======================================

- 2008-07-16
  Eliminated the following error messages when validating PDF/A output
  with Acrobat 9 Preflight:
  - (bug #1818)
    "Keyword mismatch between Document Info and XMP Metadata".
    The control characters 0x0D and 0x0A were not correctly mirrored in XMP
    when supplied as values to the "docinfo" option of PLOP_create_file().
  - (bug #1826)
    "Mismatch between ID in linearization info and ID in main cross reference
    table".
    Linearized PDF/A-1 output contained only a single /ID entry, while PDF/A
    requires two identical ones.
  - (bug #1827)
    "XMP property not predefined and no extension schema present".
    "xmpMM:InstanceID" is no longer included in PDF/A output.

- 2008-07-11 (bug #1810)
  PDF/X-1 (any variant) was not properly detected when checking for conflicts
  between actions and input triggers (see option "sacrifice"). As a result,
  PLOP would encrypt PDF/X-1 input files without the "sacrifice" option,
  which results in output which claims PDF/X-1 conformance although it is
  encrypted.

- 2008-07-11 (bug #1733)
  Bumping the PDF version to PDF 1.4 when inserting XMP is no longer done if
  the input conforms to PDF/X-1:2001, PDF/X-1a:2001, or PDF/X-3:2002, since
  these standards are based on PDF 1.3 and XMP insertion should not spoil
  PDF/X conformance.

- 2008-07-09 (bug #1803)
  Change the values of all "rdf:about" attributes in incoming XMP to an
  empty string to match PLOP's own output. Otherwise Acrobat will ignore
  all properties with empty strings in the "rdf:about", and use only those
  with an explicit id.


=======================================
PLOP and PLOP DS 3.1RC1 (June 27, 2008)
=======================================

- 2008-06-26 (bug #1783)
  Handling of XMP elements with nonconforming non-container types: text
  could wrongly get duplicated outside of a container element when element
  was transformed to a container element.

- 2008-06-26 (bug #1782)
  Newlines which were expressed as character references in the input XMP could
  get lost in the output.

- 2008-06-26 (bug #1774)
  XMP elements with multi-line content could lose the last line.

- 2008-06-26 (bug #1775)
  XMP handling: pdf:Title and pdf:Subject were wrongly converted to a
  container type.

- 2008-04-24 (bug #1708)
  Optimization could fail with "Invalid generation number in object reference"
  in rare cases with updated PDF documents where identical objects with
  different generation numbers were present in the input PDF.

- 2008-03-18 (feature #520)
  Implemented the "metadata" option for PLOP_create_file() with support for
  XMP metadata insertion and validation, and implemented various improvements
  in XMP creation.


==========================================
PLOP and PLOP DS 3.0p3 (February 28, 2008)
==========================================

- 2008-02-28 (bug #1634)
  The linearization code could crash when an XMP metadata stream with Length
  0 was present in the input document.

- 2008-02-07 (bug #1616)
  Modifies the C++ wrapper so that it can be used to make the plain C DLL
  usable from within a managed .NET application. The C++ wrapper will be
  compiled as unmanaged code to match the core library which is not fully
  managed.

=========================================
PLOP and PLOP DS 3.0p2 (November 13, 2007)
=========================================

- 2007-10-30 (bug #1513)
  Added several missing function name prefixes for Mac and Windows.

- 2007-10-25 (bug #1501)
  The get_apiname() method in the PHP exception object didn't work.


=========================================
PLOP and PLOP DS 3.0p1 (October 02, 2007)
=========================================

- 2007-09-24 (bug #1404)
  Fixed a problem with data type handling in the PHP wrapper which could show
  up on certain 64-bit platform, and cause sporadic error messages related to
  exceptions complaining about bad parameter values.

- 2007-09-07 (bug #1430)
  try/catch was missing in the dumper, sign, and hellosign examples for PHP.

- 2007-08-30 (feature #383)
  Changed the return value of pcos_get_string() in the C++ binding from
  "const string" to "string" since the former doesn't make any sense, and
  the change is fully compatible.

- 2007-08-08 (bug #1399)
  Added product-specific prefixes for the Mac FSMakePath etc. functions
  to avoid name clashes with PDFlib.


========================================
PLOP 3.0 and PLOP DS 3.0 (July 10, 2007)
========================================

- Various new features, including pCOS, digital signatures, AES, PDF/A and
  PDF/X awareness, repair mode, XMP support, LFS.

- 2007-05-29 (bug #1270)
  Fixed a problem in the COM binding which could lead to incorrect free() calls
  in open_mem() when an empty optlist was supplied (bug introduced with the
  fix for bug #801).

- 2005-12-30 (bug #427)
  Info dictionaries containing subdicts raised a warning "Object XXX allocated
  but not used".


============================
PLOP 2.1.0p6 (July 10, 2006)
============================

- 2006-07-07 (bug #801)
  open_mem() ignored the option list parameter in the COM binding.

- 2006-07-04 (bug #793)
  Linearization could fail for files containing a very large number of
  bookmarks.


===========================
PLOP 2.1.0p5 (May 23, 2006)
===========================

- 2006-05-23 (bug #597)
  Removed the "ignorecopyoption" option from the PHP wrapper, since it
  is not required, and no longer supported in the PLOP kernel (since p3).


================================
PLOP 2.1.0p4 (March 03, 2006)
================================

- 2006-02-24 (bug #684)
  PLOP erroneously processed encrypted files even without the appropriate
  master password if the actual password created an initial zero byte in
  an intermediate step of the encryption process.

- 2006-02-24 (bug #684)
  Empty strings in the Info dictionary could result in garbage strings
  in the resulting PDF output when encryption or decryption was enabled.


================================
PLOP 2.1.0p3 (December 15, 2005)
================================

- 2005-12-15
  Added Support for PHP 5.1.0.

- 2005-12-07 (bug #611)
  Due to a bug in the scanner definitions the sequence \b was not picked
  up correctly, which could result in rejected passwords although these
  were correct.

- 2005-10-18 (bug #501)
  Adds a check to guard against (invalid) PDF documents that do not
  contain any pages.

- 2005-07-05 (bug #358)
  Offline CPUs on Solaris are no longer taken into account for licensing
  purposes.

- 2005-07-05 (bug #353)
  Detect Power5 CPUs on AIX, and count only half of the reported CPUs for
  licensing purposes to take SMT into account.

- 2005-07-05 (bug #241)
  Removed the VBScript samples for ASP from package and manual since VBS
  is really unpopular for ASP development.

- 2005-07-05 (bug #190)
  Set the PLOP object to nothing in all ASP.NET samples in order to avoid
  output files remaining locked in case of an exception. Client code should
  apply the same technique.

- 2005-06-08 (bug #191)
  PDF_create_file() didn't return any result value in the Perl binding.


================================
PLOP 2.1.0p2 (February 15, 2005)
================================

- 2005-02-15
  Added Support for PHP 5.0.3.

================================
PLOP 2.1.0p1 (December 16, 2004)
================================

- 2004-12-16 (bug #39)
  Unicode file names (e.g. in Java) disappeared from the trace output.

- 2004-12-16 (bug #118)
  Added a sample Web application for .NET.

- 2004-12-13 (bug #118)
  Removes the DLL edition of PLOP.NET from the installer package and
  manual, and builds PLOP.NET against Framework 1.1 to avoid the dreaded
  AppDomainUnloadedException problem (Microsoft KB bug Q309694) without
  requiring the DLL edition. As a consequence, Framework 1.1 is now required
  to use PLOP.NET.

- 2004-12-03 (bug #97)
  Multi-threaded PLOP applications could crash under heavy load in production
  situations with a license key applied. Similarly, the command-line plop.exe
  program could crash when called with multiple input PDFs.  Non-licensed
  versions were not affected.

- 2004-10-06
  Fixed porting problems with SGI Irix.


===============================
PLOP 2.1.0 (September 27, 2004)
===============================

New features:

- 2004-09-27
  Clarifies the use of encodings for passwords, and implements auto-detection
  of password encodings for compatibility with PDFs which have been encrypted
  with Acrobat on the Mac. For encryption, WinAnsi is used as password encoding.

- 2004-09-14
  Adds an object-oriented API and exception handling for PHP 5.

- 2004-09-10
  Adds support for Unicode file names on Windows.

- 2004-09-06
  Implements the "/Root/Pages/Count" key for PLOP_get_value().

- 2004-08-26
  Implements the "/Encrypt/master" key for PLOP_get_value() which can be
  used to check whether a document has a master password set.

- 2004-08-12
  Adds another optimization level which detects duplicate stream data,
  such as fonts, XObject streams (forms and images), and others.


Bug fixes and workarounds for malformed PDF:

- 2004-08-24
  Treat references to object 0 and other non-existing objects in imported
  PDFs as equivalent to the null object. Although it is rare, some Producers
  create such output.

- 2004-07-30
  Characters outside the range 0x21-0x7E were considered illegal
  in names, although the PDF reference says that #XX notation for those
  characters is recommended but not required.

- 2004-07-29
  Encrypted PDF 1.5 couldn't be opened with PDF_open_pdi() if the plainmetadata
  permission flag was set, but the document didn't actually contain any
  metadata (even if the proper master password was supplied). This case
  actually can't be created with Acrobat 6, but only with third-party
  software like PDFlib 6.

- 2004-07-19
  Indirect objects referenced in the document Info dictionary led to garbage
  output.

- 2004-06-21
  Implements a workaround to treat objects with an offset 0 in the xref
  identical to null objects. This is required for processing some non-
  ompliant PDFs created by iText.

- 2004-05-26
  Replaced all calls to the potentially non-reentrant function localtime()
  with safe calls. This fixes a nasty Java crash on Solaris machines with
  many CPUs and a large number of simultaneous PLOP threads.

- 2004-04-22
  PDFs containing structure information could still trigger the message
  "Error reading linearized hint data" in Acrobat. Since there seems to
  be an issue with the documentation of structure hint tables the creation
  of these is currently disabled. This change is unlikely to have any
  negative effect on byteserving.

- 2004-03-24
  The Java wrapper of PLOP_open_mem() released the data too early before
  making a copy, which resulted in a crash if the GC re-used the storage.
  Now we make a copy of the provided data.

- 2004-03-24
  The "copy" option of PLOP_open_mem() was incorrectly implemented as
  "copymem" instead.

- 2004-03-19
  Two function prefixes were missing, which could lead to a crash when
  the PLOP and PDFlib libraries were used within the same executable
  and certain PDFs were processed.

- 2004-02-27
  Fixes several problems with hint stream generation, some of which trigger
  the message "Error reading linearized hint data" when the PDF is viewed
  in the browser, while others prevent proper byteserving:

  - Files with thumbnails, but no form fields, structure information, and
    page labels suffered from the error message.

  - The header of the form fields and structure hint tables was written in
    an invalid format if these tables didn't refer to shared objects.

  - Disabled generation of the form fields hint table since it didn't work
    anyway, and could cause Acrobat to reject the document.

- 2004-02-24
  Implements a workaround for malformed PDFs that have garbage
  after the %PDF-1.x header (without a comment sign).

- 2004-02-04
  Makes all API functions check the plop argument against NULL to guard
  against misbehaving clients.

- 2004-02-03
  Removed a redundant "keylength 128" option from all decrypt samples.

- 2004-02-02
  Colons are no longer accepted as separators for permission keywords.
  Colons have never been documented as separators, but have been used
  in a few samples.

- 2004-02-02
  Removed the colon character as permission separator from the noprint
  samples in all languages.

- 2004-02-01
  Bumped the buffer size for option lists in all C samples to 1024 to allow
  more complicated option lists.

- 2004-01-30
  PLOP_create_file() didn't reject the "keylength" option when no master
  password was supplied.
  
- 2004-01-30
  PDF files without an /ID entry resulted in garbage when encryption and
  linearization were applied in combination.

- 2004-01-30
  Implemented the "inmemory" option for PLOP_open_file().

- 2004-01-27
  Implemented the -M option to the PLOP command line tool for in-memory
  processing of the input file.

- 2004-01-27
  The EBCDIC conversion routine for C strings was advertently used for
  document info strings, instead of the general one with explicit length
  parameter.

- 2004-01-27
  An illegal value for the "flush" option in PLOP_create_file() would be
  reported as "(null)" in the exception text.

- 2004-01-27
  Work around a bug in the MVS C compiler related to the use of
  function pointers within structures.

- 2003-12-10
  Minor bugfixes for EBCDIC compatibility:
  - PDF_get_parameter() in the Java binding was not EBCDIC safe.
  - The banner page was not EBCDIC safe.

- 2003-12-10
  Setting the "flush" parameter always resulted in an exception ("...has
  too long string").


==============================
PLOP 2.0.0 (December 03, 2003)
==============================

- Renamed PSP to PLOP to cover extended functionality.

- Added linearization support.

- Added support for compressed object streams according to PDF 1.5 and
  related features, such as xref streams and Predictor entries for the
  FlateDecode filter.

- Added support for PDF 1.5 security features: slightly modified
  algorithm, and plaintext metadata in encrypted documents.

- Optimization: changed the object copying strategy from "copy all in xref
  table" to "walk object hierarchy", which has the additional benefit of
  removing unused objects.

- Query and change document info fields.



PSP 1.0.1p2 (July 4, 2003)
==========================

- Port to HP Tru64


PSP 1.0.1p1 (Januar 13, 2003)
=============================

- AS/400: fixed a bug in the Java wrapper which did not allow to use
  PLOP in a multi-threaded environment.

- AS/400: worked around a thread-safety problem with ldiv().


PSP 1.0.1 (October 22, 2002)
============================

- Introduced EBCDIC versions of PSP for IBM eServer iSeries and zSeries.

- Fixes a buglet in the handling of the "noassemble" and "noforms" permission
  settings. Now these automatically imply "nomodify" and "noannots",
  respectively.

- Links with flat namespaces on Mac OS X for improved compatibility with
  various OS versions and applications.

- Supports Java on Mac OS X.


==============================
PSP 1.0.0 (September 17, 2002)
==============================

- Initial release of PDFlib PSP (Pretty Safe PDF) with language bindings
  for C, COM, Java, and PHP.
