~ubuntu-branches/debian/lenny/exiv2/lenny

« back to all changes in this revision

Viewing changes to src/tiffimage.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Mark Purcell
  • Date: 2008-06-21 08:23:53 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20080621082353-b1n4w08trwfwbfl4
Tags: 0.17.1-1
* New upstream release
  - Library transition cleared on debian-release/ d-d-a
* Version 0.17 also fixes:
  - CVE-2008-2696: DoS via metadata in images (Closes: #486328)
  - crashes when fed with wrong file (Closes: #485670)
* Urgency medium for CVE fix
* debian/patches/gcc4.3.diff unecessary for gcc-4.3
* Add /usr/share/bug/exiv2/presubj message for reportbug(1)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
// ***************************************************************** -*- C++ -*-
2
2
/*
3
 
 * Copyright (C) 2006-2007 Andreas Huggel <ahuggel@gmx.net>
 
3
 * Copyright (C) 2004-2008 Andreas Huggel <ahuggel@gmx.net>
4
4
 *
5
5
 * This program is part of the Exiv2 distribution.
6
6
 *
20
20
 */
21
21
/*
22
22
  File:      tiffimage.cpp
23
 
  Version:   $Rev: 1047 $
 
23
  Version:   $Rev: 1404 $
24
24
  Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net>
25
25
  History:   15-Mar-06, ahu: created
26
26
 
27
27
 */
28
28
// *****************************************************************************
29
29
#include "rcsid.hpp"
30
 
EXIV2_RCSID("@(#) $Id: tiffimage.cpp 1047 2007-02-07 13:56:29Z ahuggel $")
 
30
EXIV2_RCSID("@(#) $Id: tiffimage.cpp 1404 2008-04-15 03:46:01Z ahuggel $")
31
31
 
32
32
// *****************************************************************************
33
33
// included header files
59
59
    {
60
60
    } // TiffImage::TiffImage
61
61
 
 
62
    int TiffImage::pixelWidth() const
 
63
    {
 
64
        ExifData::const_iterator imageWidth;
 
65
        if ((imageWidth = exifData_.findKey(Exiv2::ExifKey("Exif.Image.ImageWidth"))) != exifData_.end())
 
66
        {
 
67
            return imageWidth->toLong();
 
68
        }
 
69
        return 0;
 
70
    }
 
71
 
 
72
    int TiffImage::pixelHeight() const
 
73
    {
 
74
        ExifData::const_iterator imageHeight;
 
75
        if ((imageHeight = exifData_.findKey(Exiv2::ExifKey("Exif.Image.ImageLength"))) != exifData_.end())
 
76
        {
 
77
            return imageHeight->toLong();
 
78
        }
 
79
        return 0;
 
80
    }
 
81
 
62
82
    void TiffImage::setExifData(const ExifData& /*exifData*/)
63
83
    {
64
84
        // Todo: implement me!
100
120
        throw(Error(31, "TIFF"));
101
121
    } // TiffImage::writeMetadata
102
122
 
103
 
    const uint16_t TiffHeade2::tag_ = 42;
104
 
 
105
 
    bool TiffHeade2::read(const byte* pData, uint32_t size)
 
123
    TiffHeaderBase::TiffHeaderBase(uint16_t  tag,
 
124
                                   uint32_t  size,
 
125
                                   ByteOrder byteOrder,
 
126
                                   uint32_t  offset)
 
127
        : tag_(tag),
 
128
          size_(size),
 
129
          byteOrder_(byteOrder),
 
130
          offset_(offset)
 
131
    {
 
132
    }
 
133
 
 
134
    TiffHeaderBase::~TiffHeaderBase()
 
135
    {
 
136
    }
 
137
 
 
138
    bool TiffHeaderBase::read(const byte* pData, uint32_t size)
106
139
    {
107
140
        if (size < 8) return false;
108
141
 
119
152
        offset_ = getULong(pData + 4, byteOrder_);
120
153
 
121
154
        return true;
122
 
    } // TiffHeade2::read
123
 
 
124
 
    void TiffHeade2::print(std::ostream& os, const std::string& prefix) const
 
155
    } // TiffHeaderBase::read
 
156
 
 
157
    void TiffHeaderBase::write(Blob& blob) const
 
158
    {
 
159
        // Todo: Implement me!
 
160
    }
 
161
 
 
162
    void TiffHeaderBase::print(std::ostream& os, const std::string& prefix) const
125
163
    {
126
164
        os << prefix
127
 
           << _("Header, offset") << " = 0x" << std::setw(8) << std::setfill('0')
128
 
           << std::hex << std::right << offset_;
 
165
           << _("TIFF header, offset") << " = 0x" 
 
166
           << std::setw(8) << std::setfill('0') << std::hex << std::right
 
167
           << offset_;
129
168
 
130
169
        switch (byteOrder_) {
131
170
        case littleEndian:     os << ", " << _("little endian encoded"); break;
133
172
        case invalidByteOrder: break;
134
173
        }
135
174
        os << "\n";
136
 
    } // TiffHeade2::print
 
175
    } // TiffHeaderBase::print
 
176
 
 
177
    ByteOrder TiffHeaderBase::byteOrder() const
 
178
    {
 
179
        return byteOrder_;
 
180
    }
 
181
 
 
182
    void TiffHeaderBase::setByteOrder(ByteOrder byteOrder)
 
183
    {
 
184
        byteOrder_ = byteOrder;
 
185
    }
 
186
 
 
187
    uint32_t TiffHeaderBase::offset() const
 
188
    {
 
189
        return offset_;
 
190
    }
 
191
 
 
192
    void TiffHeaderBase::setOffset(uint32_t offset)
 
193
    {
 
194
        offset_ = offset;
 
195
    }
 
196
 
 
197
    uint32_t TiffHeaderBase::size() const
 
198
    {
 
199
        return size_;
 
200
    }
 
201
 
 
202
    uint16_t TiffHeaderBase::tag() const
 
203
    {
 
204
        return tag_;
 
205
    }
 
206
 
 
207
    TiffHeade2::TiffHeade2()
 
208
        : TiffHeaderBase(42, 8, littleEndian, 0x00000008)
 
209
    {
 
210
    }
 
211
 
 
212
    TiffHeade2::~TiffHeade2()
 
213
    {
 
214
    }
137
215
 
138
216
    // *************************************************************************
139
217
    // free functions