diff --git a/mindinsight/datavisual/utils/crc32/crc32.cc b/mindinsight/datavisual/utils/crc32/crc32.cc index 7652196833013fd74e32e63199cadede776134fb..0a339dbf9604f9ede5b19a253274cea1797e4676 100644 --- a/mindinsight/datavisual/utils/crc32/crc32.cc +++ b/mindinsight/datavisual/utils/crc32/crc32.cc @@ -293,10 +293,10 @@ uint32_t MakeCrc32c(uint32_t init_crc, const char *data, size_t size) { auto *bp_align = reinterpret_cast(MEM_ALIGN(pval, 2)); // process the not alignment bits when size < 4 byte - if (bp_align <= ep) { + if (bp_align <= ep && bp < bp_align) { // Process bytes until finished or p is 4-byte aligned while (bp != bp_align) { - crc = crc_table_o32[(crc & 0xFF) ^ (*bp++)] ^ (crc >> 8); + crc = crc_table_o32[(crc ^ (*bp++)) & 0xFF] ^ (crc >> 8); } } @@ -307,7 +307,7 @@ uint32_t MakeCrc32c(uint32_t init_crc, const char *data, size_t size) { // Process the last not alignment bytes while (bp < ep) { - crc = crc_table_o32[(crc & 0xFF) ^ (*bp++)] ^ (crc >> 8); + crc = crc_table_o32[(crc ^ (*bp++)) & 0xFF] ^ (crc >> 8); } return crc ^ 0xFFFFFFFFU; } diff --git a/mindinsight/datavisual/utils/crc32/crc32.h b/mindinsight/datavisual/utils/crc32/crc32.h index 1646576569d78f395148140cd858e2c9f903fc86..065aaa3c3d9c4313de0f5b707ccd21060ab364c8 100644 --- a/mindinsight/datavisual/utils/crc32/crc32.h +++ b/mindinsight/datavisual/utils/crc32/crc32.h @@ -53,7 +53,7 @@ uint32_t MakeCrc32c(uint32_t init_crc, const char* data, size_t size); // A function return the crc32c value uint32_t GetMaskCrc32cValue(const char* data, size_t n) { - if (data == nullptr && n > 0) { + if (data == nullptr) { // Return early to prevent MakeCrc32c resulting in segmentfault return 0; }