aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2012-06-20 17:20:57 +0200
committerJay Berkenbilt <ejb@ql.org>2012-06-20 21:20:26 +0200
commit5d4cad9c02e9d4f31477fed0e3b20b35c83936f8 (patch)
tree38768f5e4a797e09de304b1e184021f5b280da29 /libqpdf
parent24e2b2b76f1f0051f240c8371b2352c4cde85bf9 (diff)
downloadqpdf-5d4cad9c02e9d4f31477fed0e3b20b35c83936f8.tar.zst
ABI change: fix use of off_t, size_t, and integer types
Significantly improve the code's use of off_t for file offsets, size_t for memory sizes, and integer types in cases where there has to be compatibility with external interfaces. Rework sections of the code that would have prevented qpdf from working on files larger than 2 (or maybe 4) GB in size.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/BitWriter.cc2
-rw-r--r--libqpdf/Buffer.cc8
-rw-r--r--libqpdf/MD5.cc8
-rw-r--r--libqpdf/PCRE.cc2
-rw-r--r--libqpdf/Pl_AES_PDF.cc10
-rw-r--r--libqpdf/Pl_ASCII85Decoder.cc4
-rw-r--r--libqpdf/Pl_ASCIIHexDecoder.cc4
-rw-r--r--libqpdf/Pl_Buffer.cc2
-rw-r--r--libqpdf/Pl_Count.cc4
-rw-r--r--libqpdf/Pl_Discard.cc2
-rw-r--r--libqpdf/Pl_Flate.cc16
-rw-r--r--libqpdf/Pl_LZWDecoder.cc10
-rw-r--r--libqpdf/Pl_MD5.cc17
-rw-r--r--libqpdf/Pl_PNGFilter.cc6
-rw-r--r--libqpdf/Pl_QPDFTokenizer.cc6
-rw-r--r--libqpdf/Pl_RC4.cc11
-rw-r--r--libqpdf/Pl_StdioFile.cc2
-rw-r--r--libqpdf/QPDF.cc30
-rw-r--r--libqpdf/QPDFObjectHandle.cc2
-rw-r--r--libqpdf/QPDFTokenizer.cc2
-rw-r--r--libqpdf/QPDFWriter.cc83
-rw-r--r--libqpdf/QPDFXRefEntry.cc6
-rw-r--r--libqpdf/QPDF_Array.cc2
-rw-r--r--libqpdf/QPDF_Stream.cc8
-rw-r--r--libqpdf/QPDF_String.cc2
-rw-r--r--libqpdf/QPDF_encryption.cc16
-rw-r--r--libqpdf/QPDF_linearization.cc37
-rw-r--r--libqpdf/QUtil.cc33
-rw-r--r--libqpdf/RC4.cc2
-rw-r--r--libqpdf/bits.icc2
-rw-r--r--libqpdf/qpdf-c.cc4
-rw-r--r--libqpdf/qpdf/BitWriter.hh2
-rw-r--r--libqpdf/qpdf/Pl_AES_PDF.hh4
-rw-r--r--libqpdf/qpdf/Pl_ASCII85Decoder.hh6
-rw-r--r--libqpdf/qpdf/Pl_ASCIIHexDecoder.hh4
-rw-r--r--libqpdf/qpdf/Pl_LZWDecoder.hh2
-rw-r--r--libqpdf/qpdf/Pl_MD5.hh2
-rw-r--r--libqpdf/qpdf/Pl_PNGFilter.hh6
-rw-r--r--libqpdf/qpdf/Pl_QPDFTokenizer.hh4
-rw-r--r--libqpdf/qpdf/Pl_RC4.hh6
-rw-r--r--libqpdf/qpdf/QPDF_Stream.hh4
41 files changed, 221 insertions, 162 deletions
diff --git a/libqpdf/BitWriter.cc b/libqpdf/BitWriter.cc
index 5b3051d9..441501cb 100644
--- a/libqpdf/BitWriter.cc
+++ b/libqpdf/BitWriter.cc
@@ -12,7 +12,7 @@ BitWriter::BitWriter(Pipeline* pl) :
}
void
-BitWriter::writeBits(unsigned long val, int bits)
+BitWriter::writeBits(unsigned long val, unsigned int bits)
{
write_bits(this->ch, this->bit_offset, val, bits, this->pl);
}
diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc
index 71e219a1..94e69a56 100644
--- a/libqpdf/Buffer.cc
+++ b/libqpdf/Buffer.cc
@@ -7,12 +7,12 @@ Buffer::Buffer()
init(0, 0, true);
}
-Buffer::Buffer(unsigned long size)
+Buffer::Buffer(size_t size)
{
init(size, 0, true);
}
-Buffer::Buffer(unsigned char* buf, unsigned long size)
+Buffer::Buffer(unsigned char* buf, size_t size)
{
init(size, buf, false);
}
@@ -36,7 +36,7 @@ Buffer::~Buffer()
}
void
-Buffer::init(unsigned long size, unsigned char* buf, bool own_memory)
+Buffer::init(size_t size, unsigned char* buf, bool own_memory)
{
this->own_memory = own_memory;
this->size = size;
@@ -75,7 +75,7 @@ Buffer::destroy()
this->buf = 0;
}
-unsigned long
+size_t
Buffer::getSize() const
{
return this->size;
diff --git a/libqpdf/MD5.cc b/libqpdf/MD5.cc
index f00dbe4b..70be696d 100644
--- a/libqpdf/MD5.cc
+++ b/libqpdf/MD5.cc
@@ -308,7 +308,7 @@ void MD5::reset()
void MD5::encodeString(char const* str)
{
- unsigned int len = strlen(str);
+ unsigned int len = (unsigned int)strlen(str);
update((unsigned char *)str, len);
final();
@@ -316,7 +316,7 @@ void MD5::encodeString(char const* str)
void MD5::appendString(char const* input_string)
{
- update((unsigned char *)input_string, strlen(input_string));
+ update((unsigned char *)input_string, (unsigned int) strlen(input_string));
}
void MD5::encodeDataIncrementally(char const* data, int len)
@@ -332,7 +332,7 @@ void MD5::encodeFile(char const *filename, int up_to_size)
std::string("MD5: open ") + filename,
fopen(filename, "rb"));
- int len;
+ size_t len;
int so_far = 0;
int to_try = 1024;
do
@@ -344,7 +344,7 @@ void MD5::encodeFile(char const *filename, int up_to_size)
len = fread(buffer, 1, to_try, file);
if (len > 0)
{
- update(buffer, len);
+ update(buffer, (unsigned int) len);
so_far += len;
if ((up_to_size >= 0) && (so_far >= up_to_size))
{
diff --git a/libqpdf/PCRE.cc b/libqpdf/PCRE.cc
index 2e808aa7..1e5585b0 100644
--- a/libqpdf/PCRE.cc
+++ b/libqpdf/PCRE.cc
@@ -166,7 +166,7 @@ PCRE::match(char const* subject, int options, int startoffset, int size)
{
if (size == -1)
{
- size = strlen(subject);
+ size = (int) strlen(subject);
}
Match result(this->nbackrefs, subject);
diff --git a/libqpdf/Pl_AES_PDF.cc b/libqpdf/Pl_AES_PDF.cc
index a43d7e69..0f73c09c 100644
--- a/libqpdf/Pl_AES_PDF.cc
+++ b/libqpdf/Pl_AES_PDF.cc
@@ -60,9 +60,9 @@ Pl_AES_PDF::useStaticIV()
}
void
-Pl_AES_PDF::write(unsigned char* data, int len)
+Pl_AES_PDF::write(unsigned char* data, size_t len)
{
- unsigned int bytes_left = len;
+ size_t bytes_left = len;
unsigned char* p = data;
while (bytes_left > 0)
@@ -72,8 +72,8 @@ Pl_AES_PDF::write(unsigned char* data, int len)
flush(false);
}
- unsigned int available = this->buf_size - this->offset;
- int bytes = (bytes_left < available ? bytes_left : available);
+ size_t available = this->buf_size - this->offset;
+ size_t bytes = (bytes_left < available ? bytes_left : available);
bytes_left -= bytes;
std::memcpy(this->inbuf + this->offset, p, bytes);
this->offset += bytes;
@@ -93,7 +93,7 @@ Pl_AES_PDF::finish()
// Pad as described in section 3.5.1 of version 1.7 of the PDF
// specification, including providing an entire block of padding
// if the input was a multiple of 16 bytes.
- unsigned char pad = this->buf_size - this->offset;
+ unsigned char pad = (unsigned char) (this->buf_size - this->offset);
memset(this->inbuf + this->offset, pad, pad);
this->offset = this->buf_size;
flush(false);
diff --git a/libqpdf/Pl_ASCII85Decoder.cc b/libqpdf/Pl_ASCII85Decoder.cc
index ed73ff09..5c9c9f56 100644
--- a/libqpdf/Pl_ASCII85Decoder.cc
+++ b/libqpdf/Pl_ASCII85Decoder.cc
@@ -16,13 +16,13 @@ Pl_ASCII85Decoder::~Pl_ASCII85Decoder()
}
void
-Pl_ASCII85Decoder::write(unsigned char* buf, int len)
+Pl_ASCII85Decoder::write(unsigned char* buf, size_t len)
{
if (eod > 1)
{
return;
}
- for (int i = 0; i < len; ++i)
+ for (size_t i = 0; i < len; ++i)
{
if (eod > 1)
{
diff --git a/libqpdf/Pl_ASCIIHexDecoder.cc b/libqpdf/Pl_ASCIIHexDecoder.cc
index 83f7376f..ca153e89 100644
--- a/libqpdf/Pl_ASCIIHexDecoder.cc
+++ b/libqpdf/Pl_ASCIIHexDecoder.cc
@@ -17,13 +17,13 @@ Pl_ASCIIHexDecoder::~Pl_ASCIIHexDecoder()
}
void
-Pl_ASCIIHexDecoder::write(unsigned char* buf, int len)
+Pl_ASCIIHexDecoder::write(unsigned char* buf, size_t len)
{
if (this->eod)
{
return;
}
- for (int i = 0; i < len; ++i)
+ for (size_t i = 0; i < len; ++i)
{
char ch = toupper(buf[i]);
switch (ch)
diff --git a/libqpdf/Pl_Buffer.cc b/libqpdf/Pl_Buffer.cc
index 38af153d..600ee7de 100644
--- a/libqpdf/Pl_Buffer.cc
+++ b/libqpdf/Pl_Buffer.cc
@@ -15,7 +15,7 @@ Pl_Buffer::~Pl_Buffer()
}
void
-Pl_Buffer::write(unsigned char* buf, int len)
+Pl_Buffer::write(unsigned char* buf, size_t len)
{
Buffer* b = new Buffer(len);
memcpy(b->getBuffer(), buf, len);
diff --git a/libqpdf/Pl_Count.cc b/libqpdf/Pl_Count.cc
index c682b3e7..78516343 100644
--- a/libqpdf/Pl_Count.cc
+++ b/libqpdf/Pl_Count.cc
@@ -12,7 +12,7 @@ Pl_Count::~Pl_Count()
}
void
-Pl_Count::write(unsigned char* buf, int len)
+Pl_Count::write(unsigned char* buf, size_t len)
{
if (len)
{
@@ -28,7 +28,7 @@ Pl_Count::finish()
getNext()->finish();
}
-int
+off_t
Pl_Count::getCount() const
{
return this->count;
diff --git a/libqpdf/Pl_Discard.cc b/libqpdf/Pl_Discard.cc
index 7b9407a1..34d49f3a 100644
--- a/libqpdf/Pl_Discard.cc
+++ b/libqpdf/Pl_Discard.cc
@@ -12,7 +12,7 @@ Pl_Discard::~Pl_Discard()
}
void
-Pl_Discard::write(unsigned char* buf, int len)
+Pl_Discard::write(unsigned char* buf, size_t len)
{
}
diff --git a/libqpdf/Pl_Flate.cc b/libqpdf/Pl_Flate.cc
index d166e9ab..30616707 100644
--- a/libqpdf/Pl_Flate.cc
+++ b/libqpdf/Pl_Flate.cc
@@ -40,7 +40,7 @@ Pl_Flate::~Pl_Flate()
}
void
-Pl_Flate::write(unsigned char* data, int len)
+Pl_Flate::write(unsigned char* data, size_t len)
{
if (this->outbuf == 0)
{
@@ -48,7 +48,19 @@ Pl_Flate::write(unsigned char* data, int len)
this->identifier +
": Pl_Flate: write() called after finish() called");
}
- handleData(data, len, Z_NO_FLUSH);
+
+ // Write in chunks in case len is too big to fit in an int.
+ // Assume int is at least 32 bits.
+ static size_t const max_bytes = 1 << 30;
+ size_t bytes_left = len;
+ unsigned char* buf = data;
+ while (bytes_left > 0)
+ {
+ size_t bytes = (bytes_left >= max_bytes ? max_bytes : bytes_left);
+ handleData(buf, (int)bytes, Z_NO_FLUSH);
+ bytes_left -= bytes;
+ buf += bytes;
+ }
}
void
diff --git a/libqpdf/Pl_LZWDecoder.cc b/libqpdf/Pl_LZWDecoder.cc
index 811415bc..646e45de 100644
--- a/libqpdf/Pl_LZWDecoder.cc
+++ b/libqpdf/Pl_LZWDecoder.cc
@@ -25,9 +25,9 @@ Pl_LZWDecoder::~Pl_LZWDecoder()
}
void
-Pl_LZWDecoder::write(unsigned char* bytes, int len)
+Pl_LZWDecoder::write(unsigned char* bytes, size_t len)
{
- for (int i = 0; i < len; ++i)
+ for (size_t i = 0; i < len; ++i)
{
this->buf[next++] = bytes[i];
if (this->next == 3)
@@ -131,7 +131,7 @@ Pl_LZWDecoder::addToTable(unsigned char next)
assert(idx < table.size());
Buffer& b = table[idx];
last_data = b.getBuffer();
- last_size = b.getSize();
+ last_size = (unsigned int) b.getSize();
}
Buffer entry(1 + last_size);
@@ -170,7 +170,7 @@ Pl_LZWDecoder::handleCode(int code)
// be what we read last plus the first character of what
// we're reading now.
unsigned char next = '\0';
- unsigned int table_size = table.size();
+ unsigned int table_size = (unsigned int) table.size();
if (code < 256)
{
// just read < 256; last time's next was code
@@ -178,7 +178,7 @@ Pl_LZWDecoder::handleCode(int code)
}
else if (code > 257)
{
- unsigned int idx = code - 258;
+ size_t idx = code - 258;
if (idx > table_size)
{
throw std::runtime_error("LZWDecoder: bad code received");
diff --git a/libqpdf/Pl_MD5.cc b/libqpdf/Pl_MD5.cc
index 29787625..44911b42 100644
--- a/libqpdf/Pl_MD5.cc
+++ b/libqpdf/Pl_MD5.cc
@@ -12,14 +12,27 @@ Pl_MD5::~Pl_MD5()
}
void
-Pl_MD5::write(unsigned char* buf, int len)
+Pl_MD5::write(unsigned char* buf, size_t len)
{
if (! this->in_progress)
{
this->md5.reset();
this->in_progress = true;
}
- this->md5.encodeDataIncrementally((char*) buf, len);
+
+ // Write in chunks in case len is too big to fit in an int.
+ // Assume int is at least 32 bits.
+ static size_t const max_bytes = 1 << 30;
+ size_t bytes_left = len;
+ unsigned char* data = buf;
+ while (bytes_left > 0)
+ {
+ size_t bytes = (bytes_left >= max_bytes ? max_bytes : bytes_left);
+ this->md5.encodeDataIncrementally((char*) data, (int)bytes);
+ bytes_left -= bytes;
+ data += bytes;
+ }
+
this->getNext()->write(buf, len);
}
diff --git a/libqpdf/Pl_PNGFilter.cc b/libqpdf/Pl_PNGFilter.cc
index bbe10c93..19b90c03 100644
--- a/libqpdf/Pl_PNGFilter.cc
+++ b/libqpdf/Pl_PNGFilter.cc
@@ -29,10 +29,10 @@ Pl_PNGFilter::~Pl_PNGFilter()
}
void
-Pl_PNGFilter::write(unsigned char* data, int len)
+Pl_PNGFilter::write(unsigned char* data, size_t len)
{
- int left = this->incoming - this->pos;
- unsigned int offset = 0;
+ size_t left = this->incoming - this->pos;
+ size_t offset = 0;
while (len >= left)
{
// finish off current row
diff --git a/libqpdf/Pl_QPDFTokenizer.cc b/libqpdf/Pl_QPDFTokenizer.cc
index 3bd3fb6c..ea13fb72 100644
--- a/libqpdf/Pl_QPDFTokenizer.cc
+++ b/libqpdf/Pl_QPDFTokenizer.cc
@@ -22,7 +22,7 @@ Pl_QPDFTokenizer::~Pl_QPDFTokenizer()
}
void
-Pl_QPDFTokenizer::writeNext(char const* buf, int len)
+Pl_QPDFTokenizer::writeNext(char const* buf, size_t len)
{
if (len)
{
@@ -159,10 +159,10 @@ Pl_QPDFTokenizer::checkUnread()
}
void
-Pl_QPDFTokenizer::write(unsigned char* buf, int len)
+Pl_QPDFTokenizer::write(unsigned char* buf, size_t len)
{
checkUnread();
- for (int i = 0; i < len; ++i)
+ for (size_t i = 0; i < len; ++i)
{
processChar(buf[i]);
checkUnread();
diff --git a/libqpdf/Pl_RC4.cc b/libqpdf/Pl_RC4.cc
index f98c8744..74bb16b9 100644
--- a/libqpdf/Pl_RC4.cc
+++ b/libqpdf/Pl_RC4.cc
@@ -3,7 +3,7 @@
Pl_RC4::Pl_RC4(char const* identifier, Pipeline* next,
unsigned char const* key_data, int key_len,
- int out_bufsize) :
+ size_t out_bufsize) :
Pipeline(identifier, next),
out_bufsize(out_bufsize),
rc4(key_data, key_len)
@@ -21,7 +21,7 @@ Pl_RC4::~Pl_RC4()
}
void
-Pl_RC4::write(unsigned char* data, int len)
+Pl_RC4::write(unsigned char* data, size_t len)
{
if (this->outbuf == 0)
{
@@ -30,14 +30,15 @@ Pl_RC4::write(unsigned char* data, int len)
": Pl_RC4: write() called after finish() called");
}
- int bytes_left = len;
+ size_t bytes_left = len;
unsigned char* p = data;
while (bytes_left > 0)
{
- int bytes = (bytes_left < this->out_bufsize ? bytes_left : out_bufsize);
+ size_t bytes =
+ (bytes_left < this->out_bufsize ? bytes_left : out_bufsize);
bytes_left -= bytes;
- rc4.process(p, bytes, outbuf);
+ rc4.process(p, (int)bytes, outbuf);
p += bytes;
getNext()->write(outbuf, bytes);
}
diff --git a/libqpdf/Pl_StdioFile.cc b/libqpdf/Pl_StdioFile.cc
index bca4d4e8..e87de10c 100644
--- a/libqpdf/Pl_StdioFile.cc
+++ b/libqpdf/Pl_StdioFile.cc
@@ -14,7 +14,7 @@ Pl_StdioFile::~Pl_StdioFile()
}
void
-Pl_StdioFile::write(unsigned char* buf, int len)
+Pl_StdioFile::write(unsigned char* buf, size_t len)
{
size_t so_far = 0;
while (len > 0)
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index e1a5a688..7ed00c98 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -117,7 +117,7 @@ QPDF::FileInputSource::getName() const
off_t
QPDF::FileInputSource::tell()
{
- return ftell(this->file);
+ return QUtil::ftell_off_t(this->file);
}
void
@@ -126,7 +126,7 @@ QPDF::FileInputSource::seek(off_t offset, int whence)
QUtil::os_wrapper(std::string("seek to ") + this->filename + ", offset " +
QUtil::int_to_string(offset) + " (" +
QUtil::int_to_string(whence) + ")",
- fseek(this->file, offset, whence));
+ QUtil::fseek_off_t(this->file, offset, whence));
}
void
@@ -136,9 +136,9 @@ QPDF::FileInputSource::rewind()
}
size_t
-QPDF::FileInputSource::read(char* buffer, int length)
+QPDF::FileInputSource::read(char* buffer, size_t length)
{
- this->last_offset = ftell(this->file);
+ this->last_offset = QUtil::ftell_off_t(this->file);
size_t len = fread(buffer, 1, length, this->file);
if ((len == 0) && ferror(this->file))
{
@@ -197,7 +197,7 @@ QPDF::BufferInputSource::seek(off_t offset, int whence)
break;
case SEEK_END:
- this->cur_offset = this->buf->getSize() + offset;
+ this->cur_offset = (off_t)this->buf->getSize() + offset;
break;
case SEEK_CUR:
@@ -218,9 +218,9 @@ QPDF::BufferInputSource::rewind()
}
size_t
-QPDF::BufferInputSource::read(char* buffer, int length)
+QPDF::BufferInputSource::read(char* buffer, size_t length)
{
- off_t end_pos = this->buf->getSize();
+ off_t end_pos = (off_t) this->buf->getSize();
if (this->cur_offset >= end_pos)
{
this->last_offset = end_pos;
@@ -228,7 +228,7 @@ QPDF::BufferInputSource::read(char* buffer, int length)
}
this->last_offset = this->cur_offset;
- size_t len = std::min((int)(end_pos - this->cur_offset), length);
+ size_t len = std::min((size_t)(end_pos - this->cur_offset), length);
memcpy(buffer, buf->getBuffer() + this->cur_offset, len);
this->cur_offset += len;
return len;
@@ -432,7 +432,7 @@ QPDF::parse(char const* password)
throw QPDFExc(qpdf_e_damaged_pdf, this->file->getName(), "", 0,
"can't find startxref");
}
- off_t xref_offset = atoi(m2.getMatch(1).c_str());
+ off_t xref_offset = atol(m2.getMatch(1).c_str());
read_xref(xref_offset);
}
catch (QPDFExc& e)
@@ -878,10 +878,10 @@ QPDF::processXRefStream(off_t xref_offset, QPDFObjectHandle& xref_obj)
entry_size += W[i];
}
- int expected_size = entry_size * num_entries;
+ size_t expected_size = entry_size * num_entries;
PointerHolder<Buffer> bp = xref_obj.getStreamData();
- int actual_size = bp->getSize();
+ size_t actual_size = bp->getSize();
if (expected_size != actual_size)
{
@@ -1396,7 +1396,7 @@ QPDF::readObjectInternal(PointerHolder<InputSource> input,
// objects since resolving a previously unresolved
// indirect object will change file position.
off_t stream_offset = input->tell();
- int length = 0;
+ size_t length = 0;
try
{
@@ -1419,7 +1419,7 @@ QPDF::readObjectInternal(PointerHolder<InputSource> input,
}
length = length_obj.getIntValue();
- input->seek(stream_offset + length, SEEK_SET);
+ input->seek(stream_offset + (off_t)length, SEEK_SET);
if (! (readToken(input) ==
QPDFTokenizer::Token(
QPDFTokenizer::tt_word, "endstream")))
@@ -1457,7 +1457,7 @@ QPDF::readObjectInternal(PointerHolder<InputSource> input,
return object;
}
-int
+size_t
QPDF::recoverStreamLength(PointerHolder<InputSource> input,
int objid, int generation, off_t stream_offset)
{
@@ -1474,7 +1474,7 @@ QPDF::recoverStreamLength(PointerHolder<InputSource> input,
input->seek(stream_offset, SEEK_SET);
std::string last_line;
off_t last_line_offset = 0;
- int length = 0;
+ size_t length = 0;
while (input->tell() < eof)
{
std::string line = input->readLine();
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 8567eef9..55f1bf6f 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -604,7 +604,7 @@ QPDFObjectHandle::newDictionary(
QPDFObjectHandle
QPDFObjectHandle::newStream(QPDF* qpdf, int objid, int generation,
QPDFObjectHandle stream_dict,
- off_t offset, int length)
+ off_t offset, size_t length)
{
return QPDFObjectHandle(new QPDF_Stream(
qpdf, objid, generation,
diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc
index caf02df4..a60e8605 100644
--- a/libqpdf/QPDFTokenizer.cc
+++ b/libqpdf/QPDFTokenizer.cc
@@ -175,7 +175,7 @@ QPDFTokenizer::presentCharacter(char ch)
string_ignoring_newline = false;
}
- unsigned int bs_num_count = strlen(bs_num_register);
+ size_t bs_num_count = strlen(bs_num_register);
bool ch_is_octal = ((ch >= '0') && (ch <= '7'));
if ((bs_num_count == 3) || ((bs_num_count > 0) && (! ch_is_octal)))
{
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index 95fba4e0..832b3c86 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -651,7 +651,7 @@ QPDFWriter::popPipelineStack(PointerHolder<Buffer>* bp)
}
void
-QPDFWriter::adjustAESStreamLength(unsigned long& length)
+QPDFWriter::adjustAESStreamLength(size_t& length)
{
if (this->encrypted && (! this->cur_data_key.empty()) &&
this->encrypt_use_aes)
@@ -679,7 +679,7 @@ QPDFWriter::pushEncryptionFilter()
{
p = new Pl_RC4("rc4 stream encryption", this->pipeline,
(unsigned char*) this->cur_data_key.c_str(),
- this->cur_data_key.length());
+ (int)this->cur_data_key.length());
}
pushPipeline(p);
}
@@ -879,9 +879,9 @@ QPDFWriter::writeTrailer(trailer_e which, int size, bool xref_stream, int prev)
if (which == t_lin_first)
{
writeString(" /Prev ");
- int pos = this->pipeline->getCount();
+ off_t pos = this->pipeline->getCount();
writeString(QUtil::int_to_string(prev));
- int nspaces = pos + 11 - this->pipeline->getCount();
+ int nspaces = (int)(pos - this->pipeline->getCount() + 11);
assert(nspaces >= 0);
writePad(nspaces);
}
@@ -926,7 +926,8 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level,
void
QPDFWriter::unparseObject(QPDFObjectHandle object, int level,
- unsigned int flags, int stream_length, bool compress)
+ unsigned int flags, size_t stream_length,
+ bool compress)
{
unsigned int child_flags = flags & ~f_stream;
@@ -1137,16 +1138,16 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level,
Buffer* buf = bufpl.getBuffer();
val = QPDF_String(
std::string((char*)buf->getBuffer(),
- (size_t)buf->getSize())).unparse(true);
+ buf->getSize())).unparse(true);
delete buf;
}
else
{
char* tmp = QUtil::copy_string(val);
- unsigned int vlen = val.length();
+ size_t vlen = val.length();
RC4 rc4((unsigned char const*)this->cur_data_key.c_str(),
- this->cur_data_key.length());
- rc4.process((unsigned char*)tmp, vlen);
+ (int)this->cur_data_key.length());
+ rc4.process((unsigned char*)tmp, (int)vlen);
val = QPDF_String(std::string(tmp, vlen)).unparse();
delete [] tmp;
}
@@ -1164,7 +1165,7 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level,
}
void
-QPDFWriter::writeObjectStreamOffsets(std::vector<int>& offsets,
+QPDFWriter::writeObjectStreamOffsets(std::vector<off_t>& offsets,
int first_obj)
{
for (unsigned int i = 0; i < offsets.size(); ++i)
@@ -1190,8 +1191,8 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
int old_id = object.getObjectID();
int new_id = obj_renumber[old_id];
- std::vector<int> offsets;
- int first = 0;
+ std::vector<off_t> offsets;
+ off_t first = 0;
// Generate stream itself. We have to do this in two passes so we
// can calculate offsets in the first pass.
@@ -1209,7 +1210,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
// Adjust offsets to skip over comment before first object
first = offsets[0];
- for (std::vector<int>::iterator iter = offsets.begin();
+ for (std::vector<off_t>::iterator iter = offsets.begin();
iter != offsets.end(); ++iter)
{
*iter -= first;
@@ -1280,7 +1281,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
writeStringQDF("\n ");
writeString(" /Type /ObjStm");
writeStringQDF("\n ");
- unsigned long length = stream_buffer->getSize();
+ size_t length = stream_buffer->getSize();
adjustAESStreamLength(length);
writeString(" /Length " + QUtil::int_to_string(length));
writeStringQDF("\n ");
@@ -1523,8 +1524,9 @@ QPDFWriter::generateObjectStreams()
// This code doesn't do anything with /Extends.
std::vector<int> const& eligible = this->pdf.getCompressibleObjects();
- unsigned int n_object_streams = (eligible.size() + 99) / 100;
- unsigned int n_per = eligible.size() / n_object_streams;
+ unsigned int n_object_streams =
+ (unsigned int)((eligible.size() + 99) / 100);
+ unsigned int n_per = (unsigned int)(eligible.size() / n_object_streams);
if (n_per * n_object_streams < eligible.size())
{
++n_per;
@@ -1777,7 +1779,7 @@ QPDFWriter::writeHintStream(int hint_id)
openObject(hint_id);
setDataKey(hint_id);
- unsigned long hlen = hint_buffer->getSize();
+ size_t hlen = hint_buffer->getSize();
writeString("<< /Filter /FlateDecode /S ");
writeString(QUtil::int_to_string(S));
@@ -1817,13 +1819,13 @@ QPDFWriter::writeXRefTable(trailer_e which, int first, int last, int size)
int
QPDFWriter::writeXRefTable(trailer_e which, int first, int last, int size,
int prev, bool suppress_offsets,
- int hint_id, int hint_offset, int hint_length)
+ int hint_id, off_t hint_offset, off_t hint_length)
{
writeString("xref\n");
writeString(QUtil::int_to_string(first));
writeString(" ");
writeString(QUtil::int_to_string(last - first + 1));
- int space_before_zero = this->pipeline->getCount();
+ off_t space_before_zero = this->pipeline->getCount();
writeString("\n");
for (int i = first; i <= last; ++i)
{
@@ -1865,10 +1867,10 @@ int
QPDFWriter::writeXRefStream(int xref_id, int max_id, int max_offset,
trailer_e which, int first, int last, int size,
int prev, int hint_id,
- int hint_offset, int hint_length,
+ off_t hint_offset, off_t hint_length,
bool skip_compression)
{
- int xref_offset = this->pipeline->getCount();
+ off_t xref_offset = this->pipeline->getCount();
int space_before_zero = xref_offset - 1;
// field 1 contains offsets and object stream identifiers
@@ -2021,7 +2023,8 @@ QPDFWriter::writeLinearized()
//
// Second half objects
- int second_half_uncompressed = part7.size() + part8.size() + part9.size();
+ int second_half_uncompressed =
+ (int)(part7.size() + part8.size() + part9.size());
int second_half_first_obj = 1;
int after_second_half = 1 + second_half_uncompressed;
this->next_objid = after_second_half;
@@ -2077,13 +2080,13 @@ QPDFWriter::writeLinearized()
int part4_end_marker = part4.back().getObjectID();
int part6_end_marker = part6.back().getObjectID();
- int space_before_zero = 0;
- int file_size = 0;
- int part6_end_offset = 0;
- int first_half_max_obj_offset = 0;
- int second_xref_offset = 0;
- int first_xref_end = 0;
- int second_xref_end = 0;
+ off_t space_before_zero = 0;
+ off_t file_size = 0;
+ off_t part6_end_offset = 0;
+ off_t first_half_max_obj_offset = 0;
+ off_t second_xref_offset = 0;
+ off_t first_xref_end = 0;
+ off_t second_xref_end = 0;
this->next_objid = part4_first_obj;
enqueuePart(part4);
@@ -2097,7 +2100,7 @@ QPDFWriter::writeLinearized()
enqueuePart(part9);
assert(this->next_objid == after_second_half);
- int hint_length = 0;
+ off_t hint_length = 0;
PointerHolder<Buffer> hint_buffer;
// Write file in two passes. Part numbers refer to PDF spec 1.4.
@@ -2118,14 +2121,14 @@ QPDFWriter::writeLinearized()
// space if all numerical values in the parameter dictionary
// are 10 digits long plus a few extra characters for safety.
- int pos = this->pipeline->getCount();
+ off_t pos = this->pipeline->getCount();
openObject(lindict_id);
writeString("<<");
if (pass == 2)
{
std::vector<QPDFObjectHandle> const& pages = pdf.getAllPages();
int first_page_object = obj_renumber[pages[0].getObjectID()];
- int npages = pages.size();
+ int npages = (int)pages.size();
writeString(" /Linearized 1 /L ");
writeString(QUtil::int_to_string(file_size + hint_length));
@@ -2147,15 +2150,15 @@ QPDFWriter::writeLinearized()
writeString(" >>");
closeObject(lindict_id);
static int const pad = 150;
- int spaces = (pos + pad - this->pipeline->getCount());
+ int spaces = (pos - this->pipeline->getCount() + pad);
assert(spaces >= 0);
writePad(spaces);
writeString("\n");
// Part 3: first page cross reference table and trailer.
- int first_xref_offset = this->pipeline->getCount();
- int hint_offset = 0;
+ off_t first_xref_offset = this->pipeline->getCount();
+ off_t hint_offset = 0;
if (pass == 2)
{
hint_offset = this->xref[hint_id].getOffset();
@@ -2183,7 +2186,7 @@ QPDFWriter::writeLinearized()
hint_length + second_xref_offset,
hint_id, hint_offset, hint_length,
(pass == 1));
- int endpos = this->pipeline->getCount();
+ off_t endpos = this->pipeline->getCount();
if (pass == 1)
{
// Pad so we have enough room for the real xref
@@ -2260,7 +2263,7 @@ QPDFWriter::writeLinearized()
t_lin_second, 0, second_half_end,
second_trailer_size,
0, 0, 0, 0, (pass == 1));
- int endpos = this->pipeline->getCount();
+ off_t endpos = this->pipeline->getCount();
if (pass == 1)
{
@@ -2274,14 +2277,14 @@ QPDFWriter::writeLinearized()
else
{
// Make the file size the same.
- int pos = this->pipeline->getCount();
+ off_t pos = this->pipeline->getCount();
writePad(second_xref_end + hint_length - 1 - pos);
writeString("\n");
// If this assertion fails, maybe we didn't have
// enough padding above.
assert(this->pipeline->getCount() ==
- second_xref_end + hint_length);
+ (off_t)(second_xref_end + hint_length));
}
}
else
@@ -2309,7 +2312,7 @@ QPDFWriter::writeLinearized()
activatePipelineStack();
writeHintStream(hint_id);
popPipelineStack(&hint_buffer);
- hint_length = hint_buffer->getSize();
+ hint_length = (off_t)hint_buffer->getSize();
// Restore hint offset
this->xref[hint_id] = QPDFXRefEntry(1, hint_offset, 0);
diff --git a/libqpdf/QPDFXRefEntry.cc b/libqpdf/QPDFXRefEntry.cc
index 9a08c829..dea3aab6 100644
--- a/libqpdf/QPDFXRefEntry.cc
+++ b/libqpdf/QPDFXRefEntry.cc
@@ -9,7 +9,7 @@ QPDFXRefEntry::QPDFXRefEntry() :
{
}
-QPDFXRefEntry::QPDFXRefEntry(int type, int field1, int field2) :
+QPDFXRefEntry::QPDFXRefEntry(int type, off_t field1, int field2) :
type(type),
field1(field1),
field2(field2)
@@ -27,7 +27,7 @@ QPDFXRefEntry::getType() const
return this->type;
}
-int
+off_t
QPDFXRefEntry::getOffset() const
{
if (this->type != 1)
@@ -46,7 +46,7 @@ QPDFXRefEntry::getObjStreamNumber() const
throw std::logic_error(
"getObjStreamNumber called for xref entry of type != 2");
}
- return this->field1;
+ return (int) this->field1;
}
int
diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc
index ab61f307..def219dd 100644
--- a/libqpdf/QPDF_Array.cc
+++ b/libqpdf/QPDF_Array.cc
@@ -37,7 +37,7 @@ QPDF_Array::unparse()
int
QPDF_Array::getNItems() const
{
- return this->items.size();
+ return (int)this->items.size();
}
QPDFObjectHandle
diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc
index dc8c7f93..dc6692bb 100644
--- a/libqpdf/QPDF_Stream.cc
+++ b/libqpdf/QPDF_Stream.cc
@@ -22,7 +22,7 @@ std::map<std::string, std::string> QPDF_Stream::filter_abbreviations;
QPDF_Stream::QPDF_Stream(QPDF* qpdf, int objid, int generation,
QPDFObjectHandle stream_dict,
- off_t offset, int length) :
+ off_t offset, size_t length) :
qpdf(qpdf),
objid(objid),
generation(generation),
@@ -379,8 +379,8 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, bool filter,
Pl_Count count("stream provider count", pipeline);
this->stream_provider->provideStreamData(
this->objid, this->generation, &count);
- size_t actual_length = count.getCount();
- size_t desired_length =
+ off_t actual_length = count.getCount();
+ off_t desired_length =
this->stream_dict.getKey("/Length").getIntValue();
if (actual_length == desired_length)
{
@@ -446,5 +446,5 @@ QPDF_Stream::replaceFilterData(QPDFObjectHandle const& filter,
this->stream_dict.replaceOrRemoveKey("/Filter", filter);
this->stream_dict.replaceOrRemoveKey("/DecodeParms", decode_parms);
this->stream_dict.replaceKey("/Length",
- QPDFObjectHandle::newInteger(length));
+ QPDFObjectHandle::newInteger((int)length));
}
diff --git a/libqpdf/QPDF_String.cc b/libqpdf/QPDF_String.cc
index 274b2375..2ac2ed32 100644
--- a/libqpdf/QPDF_String.cc
+++ b/libqpdf/QPDF_String.cc
@@ -157,7 +157,7 @@ std::string
QPDF_String::getUTF8Val() const
{
std::string result;
- unsigned int len = this->val.length();
+ size_t len = this->val.length();
if ((len >= 2) && (len % 2 == 0) &&
(this->val[0] == '\xfe') && (this->val[1] == '\xff'))
{
diff --git a/libqpdf/QPDF_encryption.cc b/libqpdf/QPDF_encryption.cc
index 15acf067..ee5d5685 100644
--- a/libqpdf/QPDF_encryption.cc
+++ b/libqpdf/QPDF_encryption.cc
@@ -29,7 +29,7 @@ static unsigned int const key_bytes = 32;
void
pad_or_truncate_password(std::string const& password, char k1[key_bytes])
{
- int password_bytes = std::min((size_t) key_bytes, password.length());
+ int password_bytes = std::min(key_bytes, (unsigned int)password.length());
int pad_bytes = key_bytes - password_bytes;
memcpy(k1, password.c_str(), password_bytes);
memcpy(k1 + password_bytes, padding_string, pad_bytes);
@@ -121,7 +121,7 @@ QPDF::compute_data_key(std::string const& encryption_key,
}
MD5 md5;
- md5.encodeDataIncrementally(result.c_str(), result.length());
+ md5.encodeDataIncrementally(result.c_str(), (int)result.length());
MD5::Digest digest;
md5.digest(digest);
return std::string((char*) digest,
@@ -144,7 +144,7 @@ QPDF::compute_encryption_key(
pbytes[2] = (char) ((data.P >> 16) & 0xff);
pbytes[3] = (char) ((data.P >> 24) & 0xff);
md5.encodeDataIncrementally(pbytes, 4);
- md5.encodeDataIncrementally(data.id1.c_str(), data.id1.length());
+ md5.encodeDataIncrementally(data.id1.c_str(), (int)data.id1.length());
if ((data.R >= 4) && (! data.encrypt_metadata))
{
char bytes[4];
@@ -218,7 +218,7 @@ compute_U_value_R3(std::string const& user_password,
MD5 md5;
md5.encodeDataIncrementally(
pad_or_truncate_password("").c_str(), key_bytes);
- md5.encodeDataIncrementally(data.id1.c_str(), data.id1.length());
+ md5.encodeDataIncrementally(data.id1.c_str(), (int)data.id1.length());
MD5::Digest digest;
md5.digest(digest);
iterate_rc4(digest, sizeof(MD5::Digest),
@@ -583,16 +583,16 @@ QPDF::decryptString(std::string& str, int objid, int generation)
pl.write((unsigned char*)str.c_str(), str.length());
pl.finish();
PointerHolder<Buffer> buf = bufpl.getBuffer();
- str = std::string((char*)buf->getBuffer(), (size_t)buf->getSize());
+ str = std::string((char*)buf->getBuffer(), buf->getSize());
}
else
{
QTC::TC("qpdf", "QPDF_encryption rc4 decode string");
- unsigned int vlen = str.length();
+ unsigned int vlen = (int)str.length();
// Using PointerHolder guarantees that tmp will
// be freed even if rc4.process throws an exception.
PointerHolder<char> tmp(true, QUtil::copy_string(str));
- RC4 rc4((unsigned char const*)key.c_str(), key.length());
+ RC4 rc4((unsigned char const*)key.c_str(), (int)key.length());
rc4.process((unsigned char*)tmp.getPointer(), vlen);
str = std::string(tmp.getPointer(), vlen);
}
@@ -704,7 +704,7 @@ QPDF::decryptStream(Pipeline*& pipeline, int objid, int generation,
{
QTC::TC("qpdf", "QPDF_encryption rc4 decode stream");
pipeline = new Pl_RC4("RC4 stream decryption", pipeline,
- (unsigned char*) key.c_str(), key.length());
+ (unsigned char*) key.c_str(), (int)key.length());
}
heap.push_back(pipeline);
}
diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc
index 9891890f..d4e98dde 100644
--- a/libqpdf/QPDF_linearization.cc
+++ b/libqpdf/QPDF_linearization.cc
@@ -289,7 +289,7 @@ QPDF::readLinearizationData()
PointerHolder<Buffer> hbp = pb.getBuffer();
Buffer* hb = hbp.getPointer();
unsigned char const* h_buf = hb->getBuffer();
- int h_size = hb->getSize();
+ int h_size = (int)hb->getSize();
readHPageOffset(BitStream(h_buf, h_size));
@@ -345,7 +345,7 @@ QPDF::readHintStream(Pipeline& pl, off_t offset, size_t length)
{
QTC::TC("qpdf", "QPDF hint table length direct");
}
- off_t computed_end = offset + length;
+ off_t computed_end = offset + (off_t)length;
if ((computed_end < min_end_offset) ||
(computed_end > max_end_offset))
{
@@ -488,7 +488,7 @@ QPDF::checkLinearizationInternal()
}
// N: number of pages
- int npages = pages.size();
+ int npages = (int)pages.size();
if (p.npages != npages)
{
// Not tested in the test suite
@@ -736,7 +736,7 @@ QPDF::checkHPageOffset(std::list<std::string>& errors,
// under a page's /Resources dictionary in with shared objects
// even when they are private.
- unsigned int npages = pages.size();
+ unsigned int npages = (unsigned int)pages.size();
int table_offset = adjusted_offset(
this->page_offset_hints.first_page_offset);
ObjGen first_page_og(pages[0].getObjectID(), pages[0].getGeneration());
@@ -1425,7 +1425,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
pages.push_back(getUncompressedObject(*iter, object_stream_data));
}
}
- unsigned int npages = pages.size();
+ unsigned int npages = (unsigned int)pages.size();
// We will be initializing some values of the computed hint
// tables. Specifically, we can initialize any items that deal
@@ -1495,7 +1495,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
// in garbage values for all the shared object identifiers on the
// first page.
- this->c_page_offset_data.entries[0].nobjects = this->part6.size();
+ this->c_page_offset_data.entries[0].nobjects = (int)this->part6.size();
// Part 7: other pages' private objects
@@ -1646,9 +1646,11 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
// Make sure we got everything exactly once.
- unsigned int num_placed = this->part4.size() + this->part6.size() +
- this->part7.size() + this->part8.size() + this->part9.size();
- unsigned int num_wanted = this->object_to_obj_users.size();
+ unsigned int num_placed =
+ (unsigned int)(this->part4.size() + this->part6.size() +
+ this->part7.size() + this->part8.size() +
+ this->part9.size());
+ unsigned int num_wanted = (unsigned int)this->object_to_obj_users.size();
if (num_placed != num_wanted)
{
throw std::logic_error(
@@ -1672,10 +1674,11 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
// can map from object number only without regards to generation.
std::map<int, int> obj_to_index;
- this->c_shared_object_data.nshared_first_page = this->part6.size();
+ this->c_shared_object_data.nshared_first_page =
+ (unsigned int)this->part6.size();
this->c_shared_object_data.nshared_total =
this->c_shared_object_data.nshared_first_page +
- this->part8.size();
+ (unsigned int) this->part8.size();
std::vector<CHSharedObjectEntry>& shared =
this->c_shared_object_data.entries;
@@ -1684,7 +1687,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
{
QPDFObjectHandle& oh = *iter;
int obj = oh.getObjectID();
- obj_to_index[obj] = shared.size();
+ obj_to_index[obj] = (int)shared.size();
shared.push_back(CHSharedObjectEntry(obj));
}
QTC::TC("qpdf", "QPDF lin part 8 empty", this->part8.empty() ? 1 : 0);
@@ -1698,7 +1701,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
{
QPDFObjectHandle& oh = *iter;
int obj = oh.getObjectID();
- obj_to_index[obj] = shared.size();
+ obj_to_index[obj] = (int)shared.size();
shared.push_back(CHSharedObjectEntry(obj));
}
}
@@ -1814,7 +1817,7 @@ QPDF::calculateHPageOffset(
// values.
std::vector<QPDFObjectHandle> const& pages = getAllPages();
- unsigned int npages = pages.size();
+ unsigned int npages = (unsigned int)pages.size();
CHPageOffset& cph = this->c_page_offset_data;
std::vector<CHPageOffsetEntry>& cphe = cph.entries;
@@ -2019,7 +2022,7 @@ QPDF::writeHPageOffset(BitWriter& w)
w.writeBits(t.nbits_shared_numerator, 16); // 12
w.writeBits(t.shared_denominator, 16); // 13
- unsigned int nitems = getAllPages().size();
+ unsigned int nitems = (unsigned int)getAllPages().size();
std::vector<HPageOffsetEntry>& entries = t.entries;
write_vector_int(w, nitems, entries,
@@ -2110,12 +2113,12 @@ QPDF::generateHintStream(std::map<int, QPDFXRefEntry> const& xref,
BitWriter w(&c);
writeHPageOffset(w);
- S = c.getCount();
+ S = (int)c.getCount();
writeHSharedObject(w);
O = 0;
if (this->outline_hints.nobjects > 0)
{
- O = c.getCount();
+ O = (int)c.getCount();
writeHGeneric(w, this->outline_hints);
}
c.finish();
diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc
index 1bdae0fe..e1071940 100644
--- a/libqpdf/QUtil.cc
+++ b/libqpdf/QUtil.cc
@@ -1,4 +1,5 @@
#include <qpdf/QUtil.hh>
+#include <qpdf/qpdf-config.h>
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
@@ -14,7 +15,7 @@
#endif
std::string
-QUtil::int_to_string(int num, int fullpad)
+QUtil::int_to_string(long long num, int fullpad)
{
// This routine will need to be recompiled if an int can be longer than
// 49 digits.
@@ -28,14 +29,20 @@ QUtil::int_to_string(int num, int fullpad)
"limit");
}
+#ifdef HAVE_PRINTF_LL
+# define PRINTF_LL "ll"
+#else
+# define PRINTF_LL "l"
+#endif
if (fullpad)
{
- sprintf(t, "%0*d", fullpad, num);
+ sprintf(t, "%0*" PRINTF_LL "d", fullpad, num);
}
else
{
- sprintf(t, "%d", num);
+ sprintf(t, "%" PRINTF_LL "d", num);
}
+#undef PRINTF_LL
return std::string(t);
}
@@ -101,6 +108,26 @@ QUtil::fopen_wrapper(std::string const& description, FILE* f)
return f;
}
+int
+QUtil::fseek_off_t(FILE* stream, off_t offset, int whence)
+{
+#if HAVE_FSEEKO
+ return fseeko(stream, offset, whence);
+#else
+ return fseek(stream, offset, whence);
+#endif
+}
+
+off_t
+QUtil::ftell_off_t(FILE* stream)
+{
+#if HAVE_FSEEKO
+ return ftello(stream);
+#else
+ return ftell(stream);
+#endif
+}
+
char*
QUtil::copy_string(std::string const& str)
{
diff --git a/libqpdf/RC4.cc b/libqpdf/RC4.cc
index c51ebacd..b992937f 100644
--- a/libqpdf/RC4.cc
+++ b/libqpdf/RC4.cc
@@ -15,7 +15,7 @@ RC4::RC4(unsigned char const* key_data, int key_len)
{
if (key_len == -1)
{
- key_len = strlen((char*)key_data);
+ key_len = (int)strlen((char*)key_data);
}
for (int i = 0; i < 256; ++i)
diff --git a/libqpdf/bits.icc b/libqpdf/bits.icc
index e6abdf0e..31765986 100644
--- a/libqpdf/bits.icc
+++ b/libqpdf/bits.icc
@@ -95,7 +95,7 @@ read_bits(unsigned char const*& p, unsigned int& bit_offset,
#ifdef BITS_WRITE
static void
write_bits(unsigned char& ch, unsigned int& bit_offset,
- unsigned long val, unsigned bits, Pipeline* pipeline)
+ unsigned long val, unsigned int bits, Pipeline* pipeline)
{
if (bits > 32)
{
diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc
index 784351bc..2be301bb 100644
--- a/libqpdf/qpdf-c.cc
+++ b/libqpdf/qpdf-c.cc
@@ -462,10 +462,10 @@ static void qpdf_get_buffer_internal(qpdf_data qpdf)
}
}
-unsigned long qpdf_get_buffer_length(qpdf_data qpdf)
+size_t qpdf_get_buffer_length(qpdf_data qpdf)
{
qpdf_get_buffer_internal(qpdf);
- unsigned long result = 0L;
+ size_t result = 0;
if (qpdf->output_buffer)
{
result = qpdf->output_buffer->getSize();
diff --git a/libqpdf/qpdf/BitWriter.hh b/libqpdf/qpdf/BitWriter.hh
index 3ca05e10..5eae398f 100644
--- a/libqpdf/qpdf/BitWriter.hh
+++ b/libqpdf/qpdf/BitWriter.hh
@@ -15,7 +15,7 @@ class BitWriter
QPDF_DLL
BitWriter(Pipeline* pl);
QPDF_DLL
- void writeBits(unsigned long val, int bits);
+ void writeBits(unsigned long val, unsigned int bits);
// Force any partial byte to be written to the pipeline.
QPDF_DLL
void flush();
diff --git a/libqpdf/qpdf/Pl_AES_PDF.hh b/libqpdf/qpdf/Pl_AES_PDF.hh
index 178ea1e1..3947506b 100644
--- a/libqpdf/qpdf/Pl_AES_PDF.hh
+++ b/libqpdf/qpdf/Pl_AES_PDF.hh
@@ -22,7 +22,7 @@ class Pl_AES_PDF: public Pipeline
virtual ~Pl_AES_PDF();
QPDF_DLL
- virtual void write(unsigned char* data, int len);
+ virtual void write(unsigned char* data, size_t len);
QPDF_DLL
virtual void finish();
@@ -43,7 +43,7 @@ class Pl_AES_PDF: public Pipeline
bool encrypt;
bool cbc_mode;
bool first;
- unsigned int offset;
+ size_t offset; // offset into memory buffer
unsigned char key[key_size];
uint32_t rk[key_size + 28];
unsigned char inbuf[buf_size];
diff --git a/libqpdf/qpdf/Pl_ASCII85Decoder.hh b/libqpdf/qpdf/Pl_ASCII85Decoder.hh
index 333e370c..001da867 100644
--- a/libqpdf/qpdf/Pl_ASCII85Decoder.hh
+++ b/libqpdf/qpdf/Pl_ASCII85Decoder.hh
@@ -11,7 +11,7 @@ class Pl_ASCII85Decoder: public Pipeline
QPDF_DLL
virtual ~Pl_ASCII85Decoder();
QPDF_DLL
- virtual void write(unsigned char* buf, int len);
+ virtual void write(unsigned char* buf, size_t len);
QPDF_DLL
virtual void finish();
@@ -19,8 +19,8 @@ class Pl_ASCII85Decoder: public Pipeline
void flush();
char inbuf[5];
- int pos;
- int eod;
+ size_t pos;
+ size_t eod;
};
#endif // __PL_ASCII85DECODER_HH__
diff --git a/libqpdf/qpdf/Pl_ASCIIHexDecoder.hh b/libqpdf/qpdf/Pl_ASCIIHexDecoder.hh
index 12808dc8..1d33afde 100644
--- a/libqpdf/qpdf/Pl_ASCIIHexDecoder.hh
+++ b/libqpdf/qpdf/Pl_ASCIIHexDecoder.hh
@@ -11,7 +11,7 @@ class Pl_ASCIIHexDecoder: public Pipeline
QPDF_DLL
virtual ~Pl_ASCIIHexDecoder();
QPDF_DLL
- virtual void write(unsigned char* buf, int len);
+ virtual void write(unsigned char* buf, size_t len);
QPDF_DLL
virtual void finish();
@@ -19,7 +19,7 @@ class Pl_ASCIIHexDecoder: public Pipeline
void flush();
char inbuf[3];
- int pos;
+ size_t pos;
bool eod;
};
diff --git a/libqpdf/qpdf/Pl_LZWDecoder.hh b/libqpdf/qpdf/Pl_LZWDecoder.hh
index b74d69e2..4121f6f2 100644
--- a/libqpdf/qpdf/Pl_LZWDecoder.hh
+++ b/libqpdf/qpdf/Pl_LZWDecoder.hh
@@ -15,7 +15,7 @@ class Pl_LZWDecoder: public Pipeline
QPDF_DLL
virtual ~Pl_LZWDecoder();
QPDF_DLL
- virtual void write(unsigned char* buf, int len);
+ virtual void write(unsigned char* buf, size_t len);
QPDF_DLL
virtual void finish();
diff --git a/libqpdf/qpdf/Pl_MD5.hh b/libqpdf/qpdf/Pl_MD5.hh
index 28c9f87d..13a0927d 100644
--- a/libqpdf/qpdf/Pl_MD5.hh
+++ b/libqpdf/qpdf/Pl_MD5.hh
@@ -20,7 +20,7 @@ class Pl_MD5: public Pipeline
QPDF_DLL
virtual ~Pl_MD5();
QPDF_DLL
- virtual void write(unsigned char*, int);
+ virtual void write(unsigned char*, size_t);
QPDF_DLL
virtual void finish();
QPDF_DLL
diff --git a/libqpdf/qpdf/Pl_PNGFilter.hh b/libqpdf/qpdf/Pl_PNGFilter.hh
index d7c761bd..7d7ebe76 100644
--- a/libqpdf/qpdf/Pl_PNGFilter.hh
+++ b/libqpdf/qpdf/Pl_PNGFilter.hh
@@ -30,7 +30,7 @@ class Pl_PNGFilter: public Pipeline
virtual ~Pl_PNGFilter();
QPDF_DLL
- virtual void write(unsigned char* data, int len);
+ virtual void write(unsigned char* data, size_t len);
QPDF_DLL
virtual void finish();
@@ -45,8 +45,8 @@ class Pl_PNGFilter: public Pipeline
unsigned char* prev_row;
unsigned char* buf1;
unsigned char* buf2;
- int pos;
- int incoming;
+ size_t pos;
+ size_t incoming;
};
#endif // __PL_PNGFILTER_HH__
diff --git a/libqpdf/qpdf/Pl_QPDFTokenizer.hh b/libqpdf/qpdf/Pl_QPDFTokenizer.hh
index 3f816f5d..0d041577 100644
--- a/libqpdf/qpdf/Pl_QPDFTokenizer.hh
+++ b/libqpdf/qpdf/Pl_QPDFTokenizer.hh
@@ -18,13 +18,13 @@ class Pl_QPDFTokenizer: public Pipeline
public:
Pl_QPDFTokenizer(char const* identifier, Pipeline* next);
virtual ~Pl_QPDFTokenizer();
- virtual void write(unsigned char* buf, int len);
+ virtual void write(unsigned char* buf, size_t len);
virtual void finish();
private:
void processChar(char ch);
void checkUnread();
- void writeNext(char const*, int len);
+ void writeNext(char const*, size_t len);
void writeToken(QPDFTokenizer::Token&);
QPDFTokenizer tokenizer;
diff --git a/libqpdf/qpdf/Pl_RC4.hh b/libqpdf/qpdf/Pl_RC4.hh
index 1a7c94ea..bb892f12 100644
--- a/libqpdf/qpdf/Pl_RC4.hh
+++ b/libqpdf/qpdf/Pl_RC4.hh
@@ -14,18 +14,18 @@ class Pl_RC4: public Pipeline
QPDF_DLL
Pl_RC4(char const* identifier, Pipeline* next,
unsigned char const* key_data, int key_len = -1,
- int out_bufsize = def_bufsize);
+ size_t out_bufsize = def_bufsize);
QPDF_DLL
virtual ~Pl_RC4();
QPDF_DLL
- virtual void write(unsigned char* data, int len);
+ virtual void write(unsigned char* data, size_t len);
QPDF_DLL
virtual void finish();
private:
unsigned char* outbuf;
- int out_bufsize;
+ size_t out_bufsize;
RC4 rc4;
};
diff --git a/libqpdf/qpdf/QPDF_Stream.hh b/libqpdf/qpdf/QPDF_Stream.hh
index 144a9274..f6886b62 100644
--- a/libqpdf/qpdf/QPDF_Stream.hh
+++ b/libqpdf/qpdf/QPDF_Stream.hh
@@ -13,7 +13,7 @@ class QPDF_Stream: public QPDFObject
public:
QPDF_Stream(QPDF*, int objid, int generation,
QPDFObjectHandle stream_dict,
- off_t offset, int length);
+ off_t offset, size_t length);
virtual ~QPDF_Stream();
virtual std::string unparse();
QPDFObjectHandle getDict() const;
@@ -51,7 +51,7 @@ class QPDF_Stream: public QPDFObject
int generation;
QPDFObjectHandle stream_dict;
off_t offset;
- int length;
+ size_t length;
PointerHolder<Buffer> stream_data;
PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider;
};