@@ -509,13 +509,19 @@ void DngDecoder::handleMetadata(const TiffIFD* raw) {
509509    const  TiffEntry* size_entry = raw->getEntry (TiffTag::DEFAULTCROPSIZE);
510510
511511    const  auto  tl_r = origin_entry->getRationalArray (2 );
512-     std::array<unsigned , 2 > tl;
513-     std::transform (tl_r.begin (), tl_r.end (), tl.begin (),
514-                    [](const  NotARational<unsigned >& r) {
515-                      if  (r.den  == 0  || r.num  % r.den  != 0 )
516-                        ThrowRDE (" Error decoding default crop origin" 
517-                      return  r.num  / r.den ;
518-                    });
512+     std::array<unsigned , 2 > tl = {0 , 0 };
513+     try  {
514+       std::transform (tl_r.begin (), tl_r.end (), tl.begin (),
515+                      [](const  NotARational<unsigned >& r) {
516+                        if  (r.den  == 0  || r.num  % r.den  != 0 )
517+                          ThrowRDE (" Error decoding default crop origin" 
518+                        return  r.num  / r.den ;
519+                      });
520+     } catch  (const  RawDecoderException& e) {
521+       //  We push back errors from the crop parser, since the image may still
522+       //  be usable
523+       mRaw ->setError (e.what ());
524+     }
519525
520526    if  (iPoint2D cropOrigin (tl[0 ], tl[1 ]);
521527        cropped.isPointInsideInclusive (cropOrigin))
@@ -524,13 +530,19 @@ void DngDecoder::handleMetadata(const TiffIFD* raw) {
524530    cropped.dim  = mRaw ->dim  - cropped.pos ;
525531
526532    const  auto  sz_r = size_entry->getRationalArray (2 );
527-     std::array<unsigned , 2 > sz;
528-     std::transform (sz_r.begin (), sz_r.end (), sz.begin (),
529-                    [](const  NotARational<unsigned >& r) {
530-                      if  (r.den  == 0  || r.num  % r.den  != 0 )
531-                        ThrowRDE (" Error decoding default crop size" 
532-                      return  r.num  / r.den ;
533-                    });
533+     std::array<unsigned , 2 > sz = {mRaw ->dim .x , mRaw ->dim .y };
534+     try  {
535+       std::transform (sz_r.begin (), sz_r.end (), sz.begin (),
536+                      [](const  NotARational<unsigned >& r) {
537+                        if  (r.den  == 0  || r.num  % r.den  != 0 )
538+                          ThrowRDE (" Error decoding default crop size" 
539+                        return  r.num  / r.den ;
540+                      });
541+     } catch  (const  RawDecoderException& e) {
542+       //  We push back errors from the crop parser, since the image may still
543+       //  be usable
544+       mRaw ->setError (e.what ());
545+     }
534546
535547    if  (iPoint2D size (sz[0 ], sz[1 ]);
536548        size.isThisInside (mRaw ->dim ) &&
0 commit comments