diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp index 9c44e0c46..d1514ec30 100644 --- a/modules/core/src/persistence.cpp +++ b/modules/core/src/persistence.cpp @@ -303,8 +303,8 @@ namespace base64 uchar * dst_end; std::vector base64_buffer; uchar * src_beg; - uchar * src_end; uchar * src_cur; + uchar * src_end; std::vector binary_buffer; }; @@ -3498,7 +3498,7 @@ cvWriteRawData( CvFileStorage* fs, const void* _data, int len, const char* dt ) data += sizeof(size_t); break; default: - assert(0); + CV_Assert(!"elem_type is not support."); return; } @@ -3620,7 +3620,7 @@ cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, data += sizeof(size_t); break; default: - assert(0); + CV_Assert(0); return; } } @@ -3670,7 +3670,7 @@ cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, data += sizeof(size_t); break; default: - assert(0); + CV_Assert(0); return; } } @@ -6236,10 +6236,11 @@ size_t base64::base64_decode_buffer_size(size_t cnt) template inline size_t base64:: to_binary(_uint_t val, uchar * cur) { + size_t delta = CHAR_BIT; size_t cnt = sizeof(_uint_t); while (cnt --> static_cast(0U)) { *cur++ = static_cast(val); - val >>= CHAR_BIT; + val >>= delta; } return sizeof(_uint_t); } @@ -6308,8 +6309,7 @@ std::string base64::make_base64_header(int byte_size, const char * dt) oss << size << ' ' << dt << ' '; std::string buffer(oss.str()); - if (buffer.size() > HEADER_SIZE) { - CV_Assert(0); } + CV_Assert(buffer.size() < HEADER_SIZE); buffer.reserve(HEADER_SIZE); while (buffer.size() < HEADER_SIZE) @@ -6563,7 +6563,7 @@ public: case CV_32F: { to_binary_func = to_binary ; break; } case CV_64F: { to_binary_func = to_binary; break; } case CV_USRTYPE1: - default: { CV_Assert(0); break; } + default: { CV_Assert(!"mat type is invalid"); break; } }; /* check if empty */ @@ -6724,7 +6724,7 @@ private: pack.func = to_binary; break; case 'r': - default: { CV_Assert(0); break; } + default: { CV_Assert(!"type not support"); break; } }; offset = static_cast(cvAlign(static_cast(offset), static_cast(size))); @@ -6772,19 +6772,30 @@ public: CV_DbgAssert(*this); /* get current data */ - uchar buffer[sizeof(double)] = {0}; - functor_iter->func(cur + functor_iter->offset, buffer); + union + { + uchar mem[sizeof(double)]; + uchar u; + char b; + ushort w; + short s; + int i; + float f; + double d; + } buffer; /* for GCC -Wstrict-aliasing */ + std::memset(buffer.mem, 0, sizeof(buffer)); + functor_iter->func(cur + functor_iter->offset, buffer.mem); /* set node::data */ switch (functor_iter->cv_type) { - case CV_8U : { dst.data.i = cv::saturate_cast (*reinterpret_cast(buffer)); break;} - case CV_8S : { dst.data.i = cv::saturate_cast (*reinterpret_cast(buffer)); break;} - case CV_16U: { dst.data.i = cv::saturate_cast (*reinterpret_cast(buffer)); break;} - case CV_16S: { dst.data.i = cv::saturate_cast (*reinterpret_cast(buffer)); break;} - case CV_32S: { dst.data.i = cv::saturate_cast (*reinterpret_cast(buffer)); break;} - case CV_32F: { dst.data.f = cv::saturate_cast(*reinterpret_cast(buffer)); break;} - case CV_64F: { dst.data.f = cv::saturate_cast(*reinterpret_cast(buffer)); break;} + case CV_8U : { dst.data.i = cv::saturate_cast (buffer.u); break;} + case CV_8S : { dst.data.i = cv::saturate_cast (buffer.b); break;} + case CV_16U: { dst.data.i = cv::saturate_cast (buffer.w); break;} + case CV_16S: { dst.data.i = cv::saturate_cast (buffer.s); break;} + case CV_32S: { dst.data.i = cv::saturate_cast (buffer.i); break;} + case CV_32F: { dst.data.f = cv::saturate_cast(buffer.f); break;} + case CV_64F: { dst.data.f = cv::saturate_cast(buffer.d); break;} default: break; } @@ -6872,8 +6883,8 @@ private: pack.func = binary_to; break; case 'r': - default: { CV_Assert(0); break; } - }; + default: { CV_Assert(!"type not support"); break; } + }; // need a better way for outputting error. offset = static_cast(cvAlign(static_cast(offset), static_cast(size))); pack.offset = offset; @@ -6890,8 +6901,8 @@ private: case 'f': { pack.cv_type = CV_32F; break; } case 'd': { pack.cv_type = CV_64F; break; } case 'r': - default: { CV_Assert(0); break; } - } + default: { CV_Assert(!"type is not support"); break; } + } // need a better way for outputting error. binary_to_funcs.push_back(pack); } diff --git a/modules/core/test/test_io.cpp b/modules/core/test/test_io.cpp index a36b212cd..8ef91a8b2 100644 --- a/modules/core/test/test_io.cpp +++ b/modules/core/test/test_io.cpp @@ -600,7 +600,11 @@ TEST(Core_InputOutput, filestorage_yml_base64) /* 4d mat */ const int Size[] = {4, 4, 4, 4}; cv::Mat _4d(4, Size, CV_32FC4); - const cv::Range ranges[] = { {0, 2}, {0, 2}, {1, 2}, {0, 2} }; + const cv::Range ranges[] = { + cv::Range(0, 2), + cv::Range(0, 2), + cv::Range(1, 2), + cv::Range(0, 2) }; _nd_out = _4d(ranges); } @@ -658,7 +662,11 @@ TEST(Core_InputOutput, filestorage_xml_base64) /* 4d mat */ const int Size[] = {4, 4, 4, 4}; cv::Mat _4d(4, Size, CV_32FC4); - const cv::Range ranges[] = { {0, 2}, {0, 2}, {1, 2}, {0, 2} }; + const cv::Range ranges[] = { + cv::Range(0, 2), + cv::Range(0, 2), + cv::Range(1, 2), + cv::Range(0, 2) }; _nd_out = _4d(ranges); }