浏览代码

Merge pull request #1157 from ray1422/master

Fix misaligned dereference in H264 and H265 packetizers
Paul-Louis Ageneau 1 年之前
父节点
当前提交
6e45f8fe46
共有 3 个文件被更改,包括 10 次插入5 次删除
  1. 4 1
      examples/streamer/h264fileparser.cpp
  2. 3 2
      src/h264rtppacketizer.cpp
  3. 3 2
      src/h265rtppacketizer.cpp

+ 4 - 1
examples/streamer/h264fileparser.cpp

@@ -11,6 +11,7 @@
 #include "rtc/rtc.hpp"
 #include "rtc/rtc.hpp"
 
 
 #include <fstream>
 #include <fstream>
+#include <cstring>
 
 
 #ifdef _WIN32
 #ifdef _WIN32
 #include <winsock2.h>
 #include <winsock2.h>
@@ -29,7 +30,9 @@ void H264FileParser::loadNextSample() {
     while (i < sample.size()) {
     while (i < sample.size()) {
         assert(i + 4 < sample.size());
         assert(i + 4 < sample.size());
         auto lengthPtr = (uint32_t *) (sample.data() + i);
         auto lengthPtr = (uint32_t *) (sample.data() + i);
-        uint32_t length = ntohl(*lengthPtr);
+        uint32_t length;
+        std::memcpy(&length, lengthPtr, sizeof(uint32_t));
+        length = ntohl(length);
         auto naluStartIndex = i + 4;
         auto naluStartIndex = i + 4;
         auto naluEndIndex = naluStartIndex + length;
         auto naluEndIndex = naluStartIndex + length;
         assert(naluEndIndex <= sample.size());
         assert(naluEndIndex <= sample.size());

+ 3 - 2
src/h264rtppacketizer.cpp

@@ -32,8 +32,9 @@ shared_ptr<NalUnits> H264RtpPacketizer::splitMessage(binary_ptr message) {
 				LOG_WARNING << "Invalid NAL Unit data (incomplete length), ignoring!";
 				LOG_WARNING << "Invalid NAL Unit data (incomplete length), ignoring!";
 				break;
 				break;
 			}
 			}
-			auto lengthPtr = (uint32_t *)(message->data() + index);
-			uint32_t length = ntohl(*lengthPtr);
+			uint32_t length;
+			std::memcpy(&length, message->data() + index, sizeof(uint32_t));
+			length = ntohl(length);
 			auto naluStartIndex = index + 4;
 			auto naluStartIndex = index + 4;
 			auto naluEndIndex = naluStartIndex + length;
 			auto naluEndIndex = naluStartIndex + length;
 
 

+ 3 - 2
src/h265rtppacketizer.cpp

@@ -32,8 +32,9 @@ shared_ptr<H265NalUnits> H265RtpPacketizer::splitMessage(binary_ptr message) {
 				LOG_WARNING << "Invalid NAL Unit data (incomplete length), ignoring!";
 				LOG_WARNING << "Invalid NAL Unit data (incomplete length), ignoring!";
 				break;
 				break;
 			}
 			}
-			auto lengthPtr = (uint32_t *)(message->data() + index);
-			uint32_t length = ntohl(*lengthPtr);
+			uint32_t length;
+			std::memcpy(&length, message->data() + index, sizeof(uint32_t));
+			length = ntohl(length);
 			auto naluStartIndex = index + 4;
 			auto naluStartIndex = index + 4;
 			auto naluEndIndex = naluStartIndex + length;
 			auto naluEndIndex = naluStartIndex + length;