Bug #752 » bug752-exiv2-0.20.patch
| trunk/src/tiffcomposite_int.hpp (revision 2435) | ||
|---|---|---|
| 1403 | 1403 |
void iniOrigDataBuf(); |
| 1404 | 1404 |
//! Update the original data buffer and its size, return true if successful. |
| 1405 | 1405 |
bool updOrigDataBuf(const byte* pData, uint32_t size); |
| 1406 |
//! Set a flag to indicate if the array was decoded |
|
| 1407 |
void setDecoded(bool decoded) { decoded_ = decoded; }
|
|
| 1406 | 1408 |
//@} |
| 1407 | 1409 | |
| 1408 | 1410 |
//! @name Accessors |
| ... | ... | |
| 1413 | 1415 |
const ArrayDef* def() const { return arrayDef_; }
|
| 1414 | 1416 |
//! Return the number of elements in the definition |
| 1415 | 1417 |
int defSize() const { return defSize_; }
|
| 1418 |
//! Return the flag which indicates if the array was decoded |
|
| 1419 |
bool decoded() const { return decoded_; }
|
|
| 1416 | 1420 |
//@} |
| 1417 | 1421 | |
| 1418 | 1422 |
protected: |
| ... | ... | |
| 1481 | 1485 |
byte* origData_; //!< Pointer to the original data buffer (unencrypted) |
| 1482 | 1486 |
uint32_t origSize_; //!< Size of the original data buffer |
| 1483 | 1487 |
TiffComponent* pRoot_; //!< Pointer to the root component of the TIFF tree. (Only used for intrusive writing.) |
| 1488 |
bool decoded_; //!< Flag to indicate if the array was decoded |
|
| 1484 | 1489 |
}; // class TiffBinaryArray |
| 1485 | 1490 | |
| 1486 | 1491 |
/*! |
| trunk/src/tiffcomposite.cpp (revision 2435) | ||
|---|---|---|
| 143 | 143 |
setSize_(0), |
| 144 | 144 |
origData_(0), |
| 145 | 145 |
origSize_(0), |
| 146 |
pRoot_(0) |
|
| 146 |
pRoot_(0), |
|
| 147 |
decoded_(false) |
|
| 147 | 148 |
{
|
| 148 | 149 |
assert(arrayCfg != 0); |
| 149 | 150 |
} |
| ... | ... | |
| 162 | 163 |
setSize_(setSize), |
| 163 | 164 |
origData_(0), |
| 164 | 165 |
origSize_(0), |
| 165 |
pRoot_(0) |
|
| 166 |
pRoot_(0), |
|
| 167 |
decoded_(false) |
|
| 166 | 168 |
{
|
| 167 | 169 |
// We'll figure out the correct cfg later |
| 168 | 170 |
assert(cfgSelFct != 0); |
| ... | ... | |
| 282 | 284 |
setSize_(rhs.setSize_), |
| 283 | 285 |
origData_(rhs.origData_), |
| 284 | 286 |
origSize_(rhs.origSize_), |
| 285 |
pRoot_(rhs.pRoot_) |
|
| 287 |
pRoot_(rhs.pRoot_), |
|
| 288 |
decoded_(false) |
|
| 286 | 289 |
{
|
| 287 | 290 |
} |
| 288 | 291 | |
| ... | ... | |
| 841 | 844 |
{
|
| 842 | 845 |
TiffComponent* tc = tiffComponent.release(); |
| 843 | 846 |
elements_.push_back(tc); |
| 847 |
setDecoded(true); |
|
| 844 | 848 |
return tc; |
| 845 | 849 |
} // TiffBinaryArray::doAddChild |
| 846 | 850 | |
| ... | ... | |
| 1036 | 1040 | |
| 1037 | 1041 |
uint32_t TiffBinaryArray::doCount() const |
| 1038 | 1042 |
{
|
| 1039 |
if (cfg() == 0) return TiffEntryBase::doCount(); |
|
| 1043 |
if (cfg() == 0 || !decoded()) return TiffEntryBase::doCount();
|
|
| 1040 | 1044 | |
| 1041 | 1045 |
if (elements_.empty()) return 0; |
| 1042 | 1046 | |
| ... | ... | |
| 1366 | 1370 |
uint32_t dataIdx, |
| 1367 | 1371 |
uint32_t& imageIdx) |
| 1368 | 1372 |
{
|
| 1369 |
if (cfg() == 0) return TiffEntryBase::doWrite(ioWrapper, |
|
| 1370 |
byteOrder, |
|
| 1371 |
offset, |
|
| 1372 |
valueIdx, |
|
| 1373 |
dataIdx, |
|
| 1374 |
imageIdx); |
|
| 1373 |
if (cfg() == 0 || !decoded()) return TiffEntryBase::doWrite(ioWrapper,
|
|
| 1374 |
byteOrder,
|
|
| 1375 |
offset,
|
|
| 1376 |
valueIdx,
|
|
| 1377 |
dataIdx,
|
|
| 1378 |
imageIdx);
|
|
| 1375 | 1379 |
if (cfg()->byteOrder_ != invalidByteOrder) byteOrder = cfg()->byteOrder_; |
| 1376 | 1380 |
// Tags must be sorted in ascending order |
| 1377 | 1381 |
std::sort(elements_.begin(), elements_.end(), cmpTagLt); |
| ... | ... | |
| 1681 | 1685 | |
| 1682 | 1686 |
uint32_t TiffBinaryArray::doSize() const |
| 1683 | 1687 |
{
|
| 1684 |
if (cfg() == 0) return TiffEntryBase::doSize(); |
|
| 1688 |
if (cfg() == 0 || !decoded()) return TiffEntryBase::doSize();
|
|
| 1685 | 1689 | |
| 1686 | 1690 |
if (elements_.empty()) return 0; |
| 1687 | 1691 | |
| trunk/src/tiffvisitor.cpp (revision 2435) | ||
|---|---|---|
| 496 | 496 | |
| 497 | 497 |
void TiffDecoder::visitBinaryArray(TiffBinaryArray* object) |
| 498 | 498 |
{
|
| 499 |
if (object->cfg() == 0) {
|
|
| 499 |
if (object->cfg() == 0 || !object->decoded()) {
|
|
| 500 | 500 |
decodeTiffEntry(object); |
| 501 | 501 |
} |
| 502 | 502 |
} |
| ... | ... | |
| 765 | 765 | |
| 766 | 766 |
} // TiffEncoder::visitIfdMakernoteEnd |
| 767 | 767 | |
| 768 |
void TiffEncoder::visitBinaryArray(TiffBinaryArray* /*object*/)
|
|
| 768 |
void TiffEncoder::visitBinaryArray(TiffBinaryArray* object)
|
|
| 769 | 769 |
{
|
| 770 |
// Nothing to do |
|
| 770 |
if (object->cfg() == 0 || !object->decoded()) {
|
|
| 771 |
encodeTiffComponent(object); |
|
| 772 |
} |
|
| 771 | 773 |
} |
| 772 | 774 | |
| 773 | 775 |
void TiffEncoder::visitBinaryArrayEnd(TiffBinaryArray* object) |
| 774 | 776 |
{
|
| 775 | 777 |
assert(object != 0); |
| 776 | 778 | |
| 779 |
if (object->cfg() == 0 || !object->decoded()) return; |
|
| 777 | 780 |
int32_t size = object->TiffEntryBase::doSize(); |
| 778 | 781 |
if (size == 0) return; |
| 779 | 782 |
if (!object->initialize(pRoot_)) return; |
| ... | ... | |
| 1550 | 1553 |
return; |
| 1551 | 1554 |
} |
| 1552 | 1555 | |
| 1556 |
// Check duplicates |
|
| 1557 |
TiffFinder finder(object->tag(), object->group()); |
|
| 1558 |
pRoot_->accept(finder); |
|
| 1559 |
TiffEntryBase* te = dynamic_cast<TiffEntryBase*>(finder.result()); |
|
| 1560 |
if (te && te->idx() != object->idx()) {
|
|
| 1561 |
#ifndef SUPPRESS_WARNINGS |
|
| 1562 |
std::cerr << "Not decoding duplicate binary array tag 0x" |
|
| 1563 |
<< std::setw(4) << std::setfill('0') << std::hex
|
|
| 1564 |
<< object->tag() << std::dec << ", group " |
|
| 1565 |
<< tiffGroupName(object->group()) << ", idx " << object->idx() |
|
| 1566 |
<< "\n"; |
|
| 1567 |
#endif |
|
| 1568 |
object->setDecoded(false); |
|
| 1569 |
return; |
|
| 1570 |
} |
|
| 1571 | ||
| 1553 | 1572 |
if (object->TiffEntryBase::doSize() == 0) return; |
| 1554 | 1573 |
if (!object->initialize(pRoot_)) return; |
| 1555 | ||
| 1556 | 1574 |
const ArrayCfg* cfg = object->cfg(); |
| 1575 |
if (cfg == 0) return; |
|
| 1557 | 1576 | |
| 1558 | 1577 |
const CryptFct cryptFct = cfg->cryptFct_; |
| 1559 | 1578 |
if (cryptFct != 0) {
|
- « Previous
- 1
- 2
- Next »