This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-rover.git
The following commit(s) were added to refs/heads/main by this push:
new b5dadaf fix NPE when Buffer.Slice (#173)
b5dadaf is described below
commit b5dadaf5eb28dfe7f991f7d13ec3c46a0865c1a5
Author: mrproliu <[email protected]>
AuthorDate: Thu Dec 26 21:55:19 2024 +0800
fix NPE when Buffer.Slice (#173)
---
pkg/tools/buffer/buffer.go | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/pkg/tools/buffer/buffer.go b/pkg/tools/buffer/buffer.go
index 7a74fc8..368e1f6 100644
--- a/pkg/tools/buffer/buffer.go
+++ b/pkg/tools/buffer/buffer.go
@@ -256,40 +256,54 @@ func (r *Buffer) Clean() {
r.endPosition = nil
}
+// nolint
func (r *Buffer) Slice(validated bool, start, end *Position) *Buffer {
dataEvents := list.New()
detailEvents := list.New()
var firstDetailElement *list.Element
+ var lastBufferDataID = start.DataID()
for nextElement := start.element; nextElement != end.element;
nextElement = nextElement.Next() {
- if nextElement == nil {
+ if nextElement == nil || nextElement.Value == nil {
break
}
+ currentBuffer := nextElement.Value.(SocketDataBuffer)
// found first matches detail event
if detailEvents.Len() == 0 || firstDetailElement == nil {
for e := r.detailEvents.Front(); e != nil; e = e.Next()
{
- if e.Value.(SocketDataDetail).DataID() >=
nextElement.Value.(SocketDataBuffer).DataID() {
+ if e.Value == nil {
+ continue
+ }
+ if e.Value.(SocketDataDetail).DataID() >=
currentBuffer.DataID() {
detailEvents.PushBack(e.Value)
firstDetailElement = e
break
}
}
}
- dataEvents.PushBack(nextElement.Value)
+ dataEvents.PushBack(currentBuffer)
+ lastBufferDataID = currentBuffer.DataID()
}
lastBuffer := end.element.Value.(SocketDataBuffer)
dataEvents.PushBack(&SocketDataEventLimited{SocketDataBuffer:
lastBuffer, Size: end.bufIndex})
// if the first detail element been found, append the details until the
last buffer data id
+ var lastBufferID = lastBufferDataID
+ if lastBuffer != nil {
+ lastBufferID = lastBuffer.DataID()
+ }
if firstDetailElement == nil && r.detailEvents != nil {
for e := r.detailEvents.Front(); e != nil; e = e.Next() {
- if e.Value.(SocketDataDetail).DataID() ==
lastBuffer.DataID() {
+ if e.Value != nil &&
e.Value.(SocketDataDetail).DataID() == lastBufferID {
detailEvents.PushBack(e.Value)
break
}
}
- } else if firstDetailElement != nil &&
firstDetailElement.Value.(SocketDataDetail).DataID() != lastBuffer.DataID() {
+ } else if firstDetailElement != nil &&
firstDetailElement.Value.(SocketDataDetail).DataID() != lastBufferID {
for tmp := firstDetailElement.Next(); tmp != nil; tmp =
tmp.Next() {
- if tmp.Value.(SocketDataDetail).DataID() >
lastBuffer.DataID() {
+ if tmp.Value == nil {
+ continue
+ }
+ if tmp.Value.(SocketDataDetail).DataID() > lastBufferID
{
break
}
detailEvents.PushBack(tmp.Value)