diff --git a/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp b/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp index 53e87315861f2eb43fb06d17a068c7ee7bbd32c3..74fbe14f07ca4a615477d42780a843b331b1a91a 100644 --- a/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp +++ b/tapeserver/castor/tape/tapeserver/drive/DriveGeneric.cpp @@ -1285,6 +1285,12 @@ void drive::DriveGeneric::readExactBlock(void * data, size_t count, const std::s delete[] dataWithCrc32c; throw UnexpectedSize(context); } + // ENOMEM may be returned if the tape block size is larger than 'count' + if (-1 == res && ENOMEM == errno) { + delete[] dataWithCrc32c; + throw cta::exception::Errnum(errno, context + + ": Failed ST read in DriveGeneric::readExactBlock. Tape volume label size not be in the CTA/CASTOR format."); + } // Generic handling of other errors if (-1 == res) { delete[] dataWithCrc32c; @@ -1316,6 +1322,10 @@ void drive::DriveGeneric::readExactBlock(void * data, size_t count, const std::s // First handle block too big if (-1 == res && ENOSPC == errno) throw UnexpectedSize(context); + // ENOMEM may be returned if the tape block size is larger than 'count' + if (-1 == res && ENOMEM == errno) + throw cta::exception::Errnum(errno, context + + ": Failed ST read in DriveGeneric::readExactBlock. Tape volume label size not be in the CTA/CASTOR format."); // Generic handling of other errors cta::exception::Errnum::throwOnMinusOne(res, context+": Failed ST read in DriveGeneric::readExactBlock");