@@ -78,6 +78,25 @@ namespace pcpp
78
78
return true ;
79
79
}
80
80
81
+ if ((size_t )offsetInLayer > m_DataLen)
82
+ {
83
+ PCPP_LOG_ERROR (" Requested offset is larger than data length" );
84
+ return false ;
85
+ }
86
+
87
+ if (m_Data - m_Packet->m_RawPacket ->getRawData () + (ptrdiff_t )offsetInLayer
88
+ > (ptrdiff_t )m_Packet->m_RawPacket ->getRawDataLen ())
89
+ {
90
+ PCPP_LOG_ERROR (" Requested offset is larger than total packet length" );
91
+ return false ;
92
+ }
93
+
94
+ if (m_NextLayer != nullptr && (ptrdiff_t )offsetInLayer > m_NextLayer->m_Data - m_Data)
95
+ {
96
+ PCPP_LOG_ERROR (" Requested offset exceeds current layer's boundary" );
97
+ return false ;
98
+ }
99
+
81
100
return m_Packet->extendLayer (this , offsetInLayer, numOfBytesToExtend);
82
101
}
83
102
@@ -107,6 +126,32 @@ namespace pcpp
107
126
return true ;
108
127
}
109
128
129
+ if ((size_t )offsetInLayer >= m_DataLen)
130
+ {
131
+ PCPP_LOG_ERROR (" Requested offset is larger than data length" );
132
+ return false ;
133
+ }
134
+
135
+ if ((size_t )offsetInLayer + numOfBytesToShorten > m_DataLen)
136
+ {
137
+ PCPP_LOG_ERROR (" Requested number of bytes to shorten is larger than data length" );
138
+ return false ;
139
+ }
140
+
141
+ if (m_Data - m_Packet->m_RawPacket ->getRawData () + (ptrdiff_t )offsetInLayer + (ptrdiff_t )numOfBytesToShorten
142
+ > (ptrdiff_t )(m_Packet->m_RawPacket ->getRawDataLen ()))
143
+ {
144
+ PCPP_LOG_ERROR (" Requested number of bytes to shorten is larger than total packet length" );
145
+ return false ;
146
+ }
147
+
148
+ if (m_NextLayer != nullptr && (ptrdiff_t )offsetInLayer + (ptrdiff_t )numOfBytesToShorten
149
+ > m_NextLayer->m_Data - m_Data)
150
+ {
151
+ PCPP_LOG_ERROR (" Requested number of bytes to shorten exceeds current layer's boundary" );
152
+ return false ;
153
+ }
154
+
110
155
return m_Packet->shortenLayer (this , offsetInLayer, numOfBytesToShorten);
111
156
}
112
157
0 commit comments