aboutsummaryrefslogtreecommitdiffstats
path: root/ChangeLog
blob: fd15bda1b6e511148f8928e9a6d81744fceeb9e7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
2012-09-06  Jay Berkenbilt  <ejb@ql.org>

	* 3.0.2: release

	* Add new method QPDFWriter::setExtraHeaderText to add extra text,
	such as application-specific comments, to near the beginning of a
	PDF file.  For linearized files, this appears after the
	linearization parameter dictionary.  For non-linearized files, it
	appears right after the PDF header and non-ASCII comment.

	* Make it possible to write the same QPDF object with two
	different QPDFWriter objects that have both called
	setLinearization(true) by making private method
	QPDF::calculateLinearizationData() properly initialize its state.

	* Bug fix: Writing after calling QPDFWriter::setOutputMemory()
	would cause a segmentation fault because of an internal field not
	being initialized, rendering that method useless.  This has been
	corrected.

2012-08-11  Jay Berkenbilt  <ejb@ql.org>

	* 3.0.1: release

	* Bug fix: let EOF terminate a literal token as well as
	whitespace or comments.

2012-07-31  Jay Berkenbilt  <ejb@ql.org>

	* 3.0.0: release

2012-07-29  Jay Berkenbilt  <ejb@ql.org>

	* 3.0.rc1: release

2012-07-25  Jay Berkenbilt  <ejb@ql.org>

	* From Tobias: add QPDFObjectHandle::replaceStreamData that takes
	a std::string analogous to the QPDFObjectHandle::newStream that
	takes a string that was added earlier.

2012-07-21  Jay Berkenbilt  <ejb@ql.org>

	* Change configure to have image comparison tests disabled by
	default.  Update README and README.maintainer with information
	about running them.

	* Add --pages command-line option to qpdf to enable page-based
	merging and splitting.

	* Add new method QPDFObjectHandle::replaceDict to replace a
	stream's dictionary.  Use with caution; see comments in
	QPDFObjectHandle.hh.

	* Add new method QPDFObjectHandle::parse for creation of
	QPDFObjectHandle objects from string representations of the
	objects.  Thanks to Tobias Hoffmann for the idea.

2012-07-15  Jay Berkenbilt  <ejb@ql.org>

	* add new QPDF::isEncrypted method that returns some additional
	information beyond other versions.

	* libqpdf/QPDFWriter.cc: fix copyEncryptionParameters to fix the
	minimum PDF version based on other file's encryption needs.  This
	is a fix to code added on 2012-07-14 and did not impact previously
	released code.

	* libqpdf/QPDFWriter.cc (copyEncryptionParameters): Bug fix: qpdf
	was not preserving whether or not AES encryption was being used
	when copying encryption parameters.  The file would still have
	been properly encrypted, but a file that started off encrypted
	with AES could have become encrypted with RC4.

2012-07-14  Jay Berkenbilt  <ejb@ql.org>

	* QPDFWriter: add public copyEncryptionParameters to allow copying
	encryption parameters from another file.

	* QPDFWriter: detect if the user has inserted an indirect object
	from another QPDF object and throw an exception directing the user
	to copyForeignObject.

2012-07-11  Jay Berkenbilt  <ejb@ql.org>

	* Added new APIs to copy objects from one QPDF to another.  This
	includes letting QPDF::addPage() (and QPDF::addPageAt()) accept a
	page object from another QPDF and adding
	QPDF::copyForeignObject().  See QPDF.hh for details.

	* Add method QPDFObjectHandle::getOwningQPDF() to return the QPDF
	object associated with an indirect QPDFObjectHandle.

	* Add convenience methods to QPDFObjectHandle: assertIndirect(),
	isPageObject(), isPagesObject()

	* Cache when QPDF::pushInheritedAttributesToPage() has been called
	to avoid traversing the pages trees multiple times.  This state is
	cleared by QPDF::updateAllPagesCache() and ignored by
	QPDF::flattenPagesTree().

2012-07-08  Jay Berkenbilt  <ejb@ql.org>

	* Add QPDFObjectHandle::newReserved to create a reserved object
	and QPDF::replaceReserved to replace it with a real object.
	QPDFObjectHandle::newReserved reserves an object ID in a QPDF
	object and ensures that any references to it remain unresolved.
	When QPDF::replaceReserved is later called, previous references to
	the reserved object will properly resolve to the replaced object.

2012-07-07  Jay Berkenbilt  <ejb@ql.org>

	* NOTE: BREAKING API CHANGE.  Remove previously required length
	parameter from the version QPDFObjectHandle::replaceStreamData
	that uses a stream data provider.  Prior to qpdf 3.0.0, you had to
	compute the stream length in advance so that qpdf could internally
	verify that the stream data had the same length every time the
	provider was invoked.  Now this requirement is enforced a
	different way, and the length parameter is no longer required.
	Note that I take API-breaking changes very seriously and only did
	it in this case since the lack of need to know length in advance
	could significantly simplify people's code.  If you were
	previously going to a lot of trouble to compute the length of the
	new stream data in advance, you now no longer have to do that.
	You can just drop the length parameter and remove any code that
	was previously computing the length.  Thanks to Tobias Hoffmann
	for pointing out how annoying the original interface was.

2012-07-05  Jay Berkenbilt  <ejb@ql.org>

	* Add QPDFWriter methods to write to an already open stdio FILE*.
	Implementation and idea area based on contributions from Tobias
	Hoffmann.

2012-07-04  Jay Berkenbilt  <ejb@ql.org>

	* Accept changes from Tobias Hoffmann: add public method
	QPDF::pushInheritedAttributesToPage including warnings for
	non-inherited keys that may be discarded from /Pages by
	non-conformant PDF files when the /Pages tree is flattened.

2012-06-27  Jay Berkenbilt  <ejb@ql.org>

	* Add Pl_Concatenate pipeline for stream concatenation also
	implemented by Tobias Hoffmann.  Also added test code
	(libtests/concatenate.cc).

	* Add new methods implemented by Tobias Hoffmann:
	QPDFObjectHandle::newReal(double) and
	QPDFObjectHandle::newStream(QPDF*, std::string const&).

2012-06-26  Jay Berkenbilt  <ejb@ql.org>

	* Minor changes so that support for PDF files larger than 4GB
	works well with 32-bit and 64-bit Linux and also with 32-bit and
	64-bit Windows with both MSVC and mingw.

	* Rework internal methods for doing recovery of the cross
	reference tables for much greater efficiency both in terms of time
	and memory usage.

2012-06-24  Jay Berkenbilt  <ejb@ql.org>

	* Support PDF files larger than 4 GB.  This involved many changes
	to the ABI to increase the size of integer types used in various
	places as well as increasing the amount of padding used when
	creating linearized files.  Automated tests for large files are
	disabled by default.  Run ./configure --help for information on
	enabling them.  Running the tests requires 11 GB of free disk
	space and takes several minutes.

2012-06-22  Jay Berkenbilt  <ejb@ql.org>

	* examples/pdf-create.cc: Provide an example of creating a PDF
	from scratch.  This simple PDF has a single page with some text
	and an image.

	* Add empty QPDFObjectHandle factories for array and dictionary.
	With PDF-from-scratch capability, it is useful to be able to
	create empty arrays and dictionaries and add keys to them.
	Updated pdf_from_scratch.cc to use these interfaces.

2012-06-21  Jay Berkenbilt  <ejb@ql.org>

	* Add QPDF::emptyPDF() to create an empty QPDF object suitable for
	adding pages and other objects to.  pdf_from_scratch.cc is test
	code that exercises it.

	* make/libtool.mk: Place user-specified CPPFLAGS and LDFLAGS later
	in the compilation so that if a user installs things in a
	non-standard place that they have to tell the build about, earlier
	versions of qpdf installed there won't break the build.  Thanks to
	Macports for reporting this.  (Fixes bug 3468860.)

	* Instead of using off_t in the public APIs, use qpdf_offset_t
	instead.  This is defined as long long in qpdf/Types.h.  If your
	system doesn't support long long, you can redefine it.

	* Add pkg-config files

	* QPDFObjectHandle: add shallowCopy() method

	* QPDF: add new APIs for adding and removing pages.  This includes
	addPage(), addPageAt(), and removePage().  Also a method
	updateAllPagesCache() is now available to force update of the
	internal pages cache if you should modify the pages structure
	manually.

	* QPDF: new processFile method that takes an open FILE*
	instead of a filename.

2012-06-20  Jay Berkenbilt  <ejb@ql.org>

	* Add new array mutation routines to QPDFObjectHandle.
	Implemented by Tobias Hoffmann.

	* Rework APIs that use size_t, off_t, and primative integer types
	so that size_t is used for sizes of memory and off_t is used for
	file offsets.  Also set _FILE_OFFSET_BITS so that large files can
	be supported on 32-bit UNIX/Linux platforms.  The code assumes in
	places that sizeof(off_t) >= sizeof(size_t).  This resulted in
	non-compatible ABI changes and hopefully clears the way for QPDF
	to work with files that are larger than 4 GiB in size.

	* Add support for versioned symbols on ELF platforms.

	* Various fixes for gcc 4.7

2011-04-06  Jay Berkenbilt  <ejb@ql.org>

        * Fix PCRE to stop using deprecated (and now dropped) interfaces.

2011-12-28  Jay Berkenbilt  <ejb@ql.org>

	* 2.3.1: release

	* include <stdint.h> if available to support MSVC 2010

	* Since PCRE is not necessarily thread safe, don't declare any
	PCRE objects to be static.

	* Disregard stderr output from ghostscript when using it to
	compare images in the test suite; see comments in qpdf.test for
	details.

	* Fixed a few documentation errors.

2011-08-11  Jay Berkenbilt  <ejb@ql.org>

	* 2.3.0: release

	* include/qpdf/qpdf-c.h ("C"): add new methods
	qpdf_init_write_memory, qpdf_get_buffer_length, and
	qpdf_get_buffer to support writing to memory from the C API.

	* include/qpdf/qpdf-c.h ("C"): add new methods qpdf_get_info_key
	and qpdf_set_info_key for manipulating text fields of the /Info
	dictionary.

2011-08-10  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/QPDFWriter.cc (copyEncryptionParameters): preserve
	whether metadata is encryption.  This fixes part of bug 3173659:
	the password becomes invalid if qpdf copies an encrypted file with
	cleartext-metadata.

	* include/qpdf/QPDFWriter.hh: add a new constructor that takes
	only a QPDF reference and leaves specification of output for
	later.  Add methods setOutputFilename() to set the output to a
	filename or stdout, and setOutputMemory() to indicate that output
	should go to a memory buffer.  Add method getBuffer() to retrieve
	the buffer used if output was saved to a memory buffer.

	* include/qpdf/QPDF.hh: add methods replaceObject() and
	swapObjects() to allow replacement of an object and swapping of
	two objects by object ID.

	* include/qpdf/QPDFObjectHandle.hh: add new methods getDictAsMap()
	and getArrayAsVector() for returning the elements of a dictionary
	or an array as a map or vector.

2011-06-25  Jay Berkenbilt  <ejb@ql.org>

	* 2.2.4: release

2011-06-23  Jay Berkenbilt  <ejb@ql.org>

	* make/libtool.mk (install): Do not strip executables and shared
	libraries during installation.  Leave that up to the packager.

	* configure.ac: disable -Werror by default.

2011-05-07  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/QPDF_linearization.cc (isLinearized): remove unused
	offset variable, found by a gcc 4.6 warning.

2011-04-30  Jay Berkenbilt  <ejb@ql.org>

	* 2.2.3: release

	* libqpdf/QPDF.cc (readObjectInternal): Accept the case of the
	stream keyword being followed by carriage return by itself.  While
	this is not permitted by the specification, there are PDF files
	that do this, and other readers can read them.

	* libqpdf/Pl_QPDFTokenizer.cc (processChar): When an inline image
	is detected, suspend normalization only up to the end of the
	inline image rather than for the remainder of the content stream.
	(Fixes qpdf-Bugs 3152169.)

2011-01-31  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/QPDF.cc (readObjectAtOffset): use -1 rather than 0 when
	reading an object at a given to indicate that no object number is
	expected.  This allows xref recovery to proceed even if a file
	uses the invalid object number 0 as a regular object.

	* libqpdf/QPDF_linearization.cc (isLinearized): use -1 rather than
	0 as a sentintel for not having found the first object in the
	file.  Since -1 can never match the regular expression, this
	prevents an infinite loop when checking a file that starts with
	(erroneous) 0 0 obj.  (Fixes qpdf-Bugs-3159950.)

2010-10-04  Jay Berkenbilt  <ejb@ql.org>

	* 2.2.2: release

	* include/qpdf/qpdf-c.h: Add qpdf_read_memory to C API to call
	QPDF::processMemoryFile.

2010-10-01  Jay Berkenbilt  <ejb@ql.org>

	* 2.2.1: release

	* include/qpdf/QPDF.hh: Add setOutputStreams method to allow
	redirection of library-generated output/error to alternative
	streams.

	* include/qpdf/QPDF.hh: Add processMemoryFile method for
	processing a PDF file from a memory buffer instead of a file.

2010-09-24  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/QPDF.cc: change private "file" method to be a
	PointerHolder<InputSource> to prepare qpdf for being able to work
	with PDF files loaded into memory in addition to working with
	files on disk.

	* include/qpdf/PointerHolder.hh: add operator* and operator->
	methods so that PointerHolder objects can be used like pointers.
	This is consistent with the smart pointer objects in the next
	revision of C++.

2010-09-05  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/QPDF.cc (readObjectInternal): Recognize empty objects
	and treat them as null.

	* libqpdf/QPDF_Stream.cc (filterable): Handle inline image filter
	abbreviations as stream filter abbreviations.  Although this is
	not technically allowed by the PDF specification, table H.1 in the
	pre-ISO spec indicates that Adobe's readers accept them.  Thanks
	to Jian Ma <stronghorse@tom.com> for bringing this to my
	attention.

2010-08-14  Jay Berkenbilt  <ejb@ql.org>

	* 2.2.0: release

	* Rename README.windows to README-windows.txt and convert its line
	endings to Windows-style line endings.  Also mention Jian Ma's VC6
	port in the manual and README-windows.txt.

2010-08-09  Jay Berkenbilt  <ejb@ql.org>

	* Add QPDFObjectHandle::getRawStreamData to return raw
	(unfiltered) stream data.

2010-08-08  Jay Berkenbilt  <ejb@ql.org>

	* 2.2.rc1: release

2010-08-05  Jay Berkenbilt  <ejb@ql.org>

	* Add QPDFObjectHandle::addPageContents, a convenience routine for
	appending or prepending new streams to a page's content streams.
	The "pdf-double-page-size" example illustrates its use.

	* Add new methods to QPDFObjectHandle: replaceStreamData and
	newStream.  These methods allow users of the qpdf library to add
	new streams and to replace data of existing streams.  The
	"pdf-double-page-size" and "pdf-invert-images" examples illustrate
	their use.

2010-06-06  Jay Berkenbilt  <ejb@ql.org>

	* Fix memory leak for QPDF objects whose underlying PDF objects
	contain circular references.  Thanks to Jian Ma
	<stronghorse@tom.com> for calling my attention to the memory leak.

2010-04-25  Jay Berkenbilt  <ejb@ql.org>

	* 2.1.5: release

	* libqpdf/QPDF_encryption.cc (compute_encryption_key): remove
	restrictions on length of file identifier string.  (Fixes
	qpdf-Bugs-2991412.)

2010-04-18  Jay Berkenbilt  <ejb@ql.org>

	* 2.1.4: release

	* libqpdf/QPDFWriter.cc (writeLinearized): the padding calculation
	fix in 2.1.2 was applied in only one place but it was needed in
	two places since there are actually two cross reference streams in
	a linearized file.  The new padding calculation is now used for
	both streams.  Hopefully this should put an end to linearization
	padding problems.  (Fixes qpdf-Bugs-2979219.)

2010-04-10  Jay Berkenbilt  <ejb@ql.org>

	* qpdf/qpdf.cc (main): Since qpdf --check only checks syntax and
	stream encoding without doing any semantic checks, make the output
	clearer when no errors around found.  This is inspired by
	qpdf-Bugs-2983225.

2010-03-27  Jay Berkenbilt  <ejb@ql.org>

	* 2.1.3: release

	* libqpdf/QPDF_optimization.cc (flattenScalarReferences): Flatten
	scalar references for unreferenced objects as well as those seen
	during traversal of the file.  This matters when preserving object
	streams that contain unreferenced objects with indirect scalars.
	(Fixes qpdf-Bugs-2974522.)  Updated TODO with a description of a
	possibly better fix involving removal of flattenScalarReferences.

	* libqpdf/Pl_AES_PDF.cc (finish): Don't complain if an AES input
	buffer is not a multiple of 16 bytes.  Instead, just pad with
	nulls and hope for the best.  PDF files have been encountered "in
	the wild" that contain AES buffers that aren't a multiple of 16
	bytes.

2010-01-24  Jay Berkenbilt  <ejb@ql.org>

	* 2.1.2: release

	* libqpdf/QPDFWriter.cc: fix logic error in padding calculation.
	When writing linearized files with cross reference streams, the
	padding calculation failed to take differences in sizes of
	compressed data between pass 1 and pass 2 into consideration.

2009-12-14  Jay Berkenbilt  <ejb@ql.org>

	* 2.1.1: release

	* qpdf/qtest/qpdf.test: improve test for acroread to make sure it
	actually works and is not just present in the path.

2009-12-13  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/qpdf/Pl_AES_PDF.hh: include <stdint.h>, if available, so
	we have valid definitions of uint32_t.

2009-10-30  Jay Berkenbilt  <ejb@ql.org>

	* 2.1: release

	* libqpdf/QPDF.cc: be more forgiving of extraneous whitespace in
	the xref table and while recovering from error conditions.

2009-10-26  Jay Berkenbilt  <ejb@ql.org>

	* Work around failure of PCRE test case; this test case exercises
	an aspect of PCRE that qpdf does not use, and the test fails with
	the version of PCRE on Red Hat Enterprise Linux 5, so we ignore
	failure on this particular test case.

	* Fix RPM .spec file to include "C" examples

2009-10-24  Jay Berkenbilt  <ejb@ql.org>

	* 2.1.rc1: release

	* Provide interfaces for getting qpdf's own version number

2009-10-19  Jay Berkenbilt  <ejb@ql.org>

	* include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of
	QPDFExc rather than a list of strings.  This way, warnings may be
	inspected in more detail.

	* Include information about the last object read in most error
	messages.  Most of the time, this will provide a good hint as to
	which object contains the error, but it's possible that the last
	object read may not necessarily be the one that has the error if
	the erroneous object was previously read and cached.

2009-10-18  Jay Berkenbilt  <ejb@ql.org>

	* If forcing version, disable object stream creation and/or
	encryption if previous specifications are incompatible with new
	version.  It is still possible that PDF content, compression
	schemes, etc., may be incompatible with the new version, but at
	least this way, older viewers will at least have a chance.

	* libqpdf/QPDFWriter.cc (unparseObject): avoid compressing
	Metadata streams if possible.

2009-10-13  Jay Berkenbilt  <ejb@ql.org>

	* Upgrade embedded qtest to version 1.4, which allows the test
	suite to be run in Windows with MSYS and ActiveState Perl rather
	than requiring Cygwin perl.

2009-10-04  Jay Berkenbilt  <ejb@ql.org>

	* Implement support AES encrypt and crypt filters.  Implementation
	is not fully tested due to lack of test data but has been tested
	for several cases.

2009-10-04  Jay Berkenbilt  <ejb@ql.org>

	* Add methods to QPDFWriter and corresponding command line
	arguments to qpdf to set the minimum output PDF version and also
	to force the version to a particular value.

	* libqpdf/QPDF.cc (processXRefStream): warn and ignore extra xref
	stream entries when stream is larger than reported size.  This
	used to be a fatal error.  (Fixes qpdf-Bugs-2872265.)

2009-09-27  Jay Berkenbilt  <ejb@ql.org>

	* Add several methods to query permissions controlled by the
	encryption dictionary.  Note that qpdf does not enforce these
	permissions even though it allows the user to query them.

	* The function QPDF::getUserPassword returned the user password
	with the required padding as specified by the PDF specification.
	This is seldom useful to users.  This function has been replaced
	by QPDF::getPaddedUserPassword.  Call the new
	QPDF::getTrimmedUserPassword to retreive the user password in a
	human-readable format.

	* qpdf/qpdf.cc (main): qpdf --check now prints the PDF version
	number in addition to its other output.

2009-09-26  Jay Berkenbilt  <ejb@ql.org>

	* Removed all references to QEXC; now using std::runtime_error and
	std::logic_error and their subclasses for all exceptions.

2009-05-03  Jay Berkenbilt  <ejb@ql.org>

	* 2.0.6: release

	* libqpdf/QPDF_Stream.cc (filterable): ignore /DecodeParms if it's
	not a type we recognize.  (Fixes qpdf-Bugs-2779746.)

2009-03-10  Jay Berkenbilt  <ejb@ql.org>

	* 2.0.5: release

2009-03-09  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/Pl_LZWDecoder.cc: adjust LZWDecoder full table
	detection, now having been able to adequately test boundary
	conditions both and with and without early code change.  Also
	compared implementation with other LZW decoders.

2009-03-08  Jay Berkenbilt  <ejb@ql.org>

	* qpdf/fix-qdf (write_ostream): Adjust offsets while writing
	object streams to account for changes in the length of the
	dictionary and offset tables.

	* qpdf/qpdf.cc (main): In check mode, in addition to checking
	structure of file, attempt to decode all stream data.

	* libqpdf/QPDFWriter.cc (QPDFWriter::writeObject): In QDF mode,
	write a comment to the QDF file before each object that indicates
	the object ID of the corresponding object from the original file.
	Add --no-original-object-ids flag to qpdf and
	setSuppressOriginalObjectIDs() method to QPDFWriter to turn this
	behavior off.

	* libqpdf/QPDF.cc (QPDF::pipeStreamData): Issue a warning instead
	of failing if there is a problem found while decoding stream.

	* qpdf/qpdf.cc: Exit with a status of 3 if warnings were found
	regardless of what mode we're in.

2009-02-21  Jay Berkenbilt  <ejb@ql.org>

	* 2.0.4: release

2009-02-20  Jay Berkenbilt  <ejb@ql.org>

	* Fix many typos in comments and strings.

	* qpdf/qpdf.cc: in --check mode, if there are warnings but no
	errors, exit with a status of 3.

	* libqpdf/QPDF.cc (QPDF::insertXrefEntry): when recovering the
	cross-reference table, have objects we encounter later in the file
	supersede those we found earlier.  This improves the chances of
	being able to recover appended files with damaged cross-reference
	tables.

2009-02-19  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/Pl_LZWDecoder.cc: correct logic error for previously
	untested case of running the LZW decoder without the "early code
	change" flag.  Thanks to a bug report from "Atom Smasher", I
	finally was able to obtain an input stream compressed in this way.

2009-02-15  Jay Berkenbilt  <ejb@ql.org>

	* 2.0.3: release

2008-12-11  Jay Berkenbilt  <ejb@ql.org>

	* qpdf/qpdf.cc (main): Accept -help and -version as well as --help
	and --version

2008-11-23  Jay Berkenbilt  <ejb@ql.org>

	* Include stdio.h in a few files for proper compilation with (yet
	to be released) gcc 4.4

	* updated embedded qtest to version 1.3

	* libqpdf/QPDF_String.cc (QPDF_String::getUTF8Val): handle
	UTF-16BE properly rather than just treating the string as a string
	of 16-bit characters.

2008-06-30  Jay Berkenbilt  <ejb@ql.org>

	* 2.0.2: release

	* updated embedded qtest to version 1.2 (includes previous
	changes)

2008-06-07  Jay Berkenbilt  <ejb@ql.org>

	* qpdf/qtest/qpdf/diff-encrypted: change == to = so that the test
	suite passes when /bin/sh is not bash

2008-05-07  Jay Berkenbilt  <ejb@ql.org>

	* qtest/bin/qtest-driver (run_test): increase timeout for qtest to
	be more tolerant of slow machines

2008-05-06  Jay Berkenbilt  <ejb@ql.org>

	* 2.0.1: release

	* make/rules.mk: fix logic with .dep generation for .lo files so
	that dependencies work properly with libtool

2008-05-05  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/qpdf/MD5.hh: fix header to be 64-bit clean

	* configure.ac: add tests for sized integer types

2008-05-04  Jay Berkenbilt  <ejb@ql.org>

	* libqpdf/QPDF_encryption.cc: do not assume size_t is unsigned int

	* qpdf/qtest/qpdf.test: removed locale-specific tests.  These were
	really to check bugs in perl 5.8.0 and are obsolete now.  They
	also make the test suite fail in some environments that don't have
	all the locales fully configured.

	* various: updated several files for gcc 4.3 by adding missing
	includes (string.h, stdlib.h)

2008-04-26  Jay Berkenbilt  <ejb@ql.org>

	* 2.0: initial public release