aboutsummaryrefslogtreecommitdiff
path: root/src/tiff_parser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tiff_parser.cc')
-rw-r--r--src/tiff_parser.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/tiff_parser.cc b/src/tiff_parser.cc
index f9488ef..80f3759 100644
--- a/src/tiff_parser.cc
+++ b/src/tiff_parser.cc
@@ -92,7 +92,8 @@ bool GetFullDimension(const TiffDirectory& tiff_directory, std::uint32_t* width,
bool GetRational(const TiffDirectory::Tag& tag, const TiffDirectory& directory,
const int data_size, PreviewImageData::Rational* data) {
std::vector<Rational> value;
- if (directory.Get(tag, &value)) {
+ if (directory.Get(tag, &value) &&
+ value.size() == static_cast<size_t>(data_size)) {
for (size_t i = 0; i < value.size(); ++i) {
data[i].numerator = value[i].numerator;
data[i].denominator = value[i].denominator;
@@ -219,6 +220,15 @@ Error FillPreviewImageData(const TiffDirectory& tiff_directory,
success &= tiff_directory.Get(kTiffTagModel, &preview_image_data->model);
}
+ if (tiff_directory.Has(kTiffTagCfaPatternDim)) {
+ std::vector<std::uint32_t> cfa_pattern_dim;
+ if (tiff_directory.Get(kTiffTagCfaPatternDim, &cfa_pattern_dim) &&
+ cfa_pattern_dim.size() == 2) {
+ preview_image_data->cfa_pattern_dim[0] = cfa_pattern_dim[0];
+ preview_image_data->cfa_pattern_dim[1] = cfa_pattern_dim[1];
+ }
+ }
+
if (tiff_directory.Has(kExifTagDateTimeOriginal)) {
success &= tiff_directory.Get(kExifTagDateTimeOriginal,
&preview_image_data->date_time);