Skip to content

Commit 3813346

Browse files
simittRon cohen
authored andcommitted
Fix APM Server panic on invalid event input. (#2)
1 parent 7412447 commit 3813346

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

beater/v2_handler.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (v *v2Handler) handleRawModel(rawModel map[string]interface{}) (transform.T
9090

9191
tr, err := model.modelDecoder(entry, err)
9292
if err != nil {
93-
return tr, err
93+
return nil, err
9494
}
9595
return tr, nil
9696
}
@@ -104,7 +104,7 @@ func (v *v2Handler) readBatch(batchSize int, reader *decoder.NDJSONStreamReader,
104104
var err error
105105
var rawModel map[string]interface{}
106106

107-
eventables := []transform.Transformable{}
107+
var eventables []transform.Transformable
108108
for i := 0; i < batchSize && err == nil; i++ {
109109
rawModel, err = reader.Read()
110110
if err != nil && err != io.EOF {
@@ -124,6 +124,7 @@ func (v *v2Handler) readBatch(batchSize int, reader *decoder.NDJSONStreamReader,
124124
if err != nil {
125125
response.addWithOffendingDocument(SchemaValidationErr, err.Error(), reader.LastLine())
126126
response.Invalid++
127+
continue
127128
}
128129
eventables = append(eventables, tr)
129130
}
@@ -194,7 +195,7 @@ func (v *v2Handler) handleRequestBody(r *http.Request, ndReader *decoder.NDJSONS
194195

195196
for {
196197
transformables, done := v.readBatch(batchSize, ndReader, resp)
197-
if transformables != nil && len(transformables) > 0 {
198+
if transformables != nil {
198199
err := report(r.Context(), pendingReq{
199200
transformables: transformables,
200201
tcontext: tctx,

beater/v2_integration_test.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,18 @@ func TestV2IntakeIntegration(t *testing.T) {
5252
handler := (&v2BackendRoute).Handler(c, report)
5353

5454
for _, test := range []struct {
55-
path string
56-
name string
55+
path string
56+
name string
57+
status int
5758
}{
58-
{path: "../testdata/intake-v2/errors.ndjson", name: "Errors"},
59-
{path: "../testdata/intake-v2/transactions.ndjson", name: "Transactions"},
60-
{path: "../testdata/intake-v2/spans.ndjson", name: "Spans"},
61-
{path: "../testdata/intake-v2/metrics.ndjson", name: "Metrics"},
62-
{path: "../testdata/intake-v2/minimal_process.ndjson", name: "MixedMinimalProcess"},
63-
{path: "../testdata/intake-v2/minimal_service.ndjson", name: "MinimalService"},
64-
{path: "../testdata/intake-v2/metadata_null_values.ndjson", name: "MetadataNullValues"},
59+
{status: 202, path: "../testdata/intake-v2/errors.ndjson", name: "Errors"},
60+
{status: 202, path: "../testdata/intake-v2/transactions.ndjson", name: "Transactions"},
61+
{status: 202, path: "../testdata/intake-v2/spans.ndjson", name: "Spans"},
62+
{status: 202, path: "../testdata/intake-v2/metrics.ndjson", name: "Metrics"},
63+
{status: 202, path: "../testdata/intake-v2/minimal_process.ndjson", name: "MixedMinimalProcess"},
64+
{status: 202, path: "../testdata/intake-v2/minimal_service.ndjson", name: "MinimalService"},
65+
{status: 202, path: "../testdata/intake-v2/metadata_null_values.ndjson", name: "MetadataNullValues"},
66+
{status: 400, path: "../testdata/intake-v2/invalid-event.ndjson", name: "InvalidEvent"},
6567
} {
6668

6769
b, err := loader.LoadDataAsBytes(test.path)
@@ -80,7 +82,7 @@ func TestV2IntakeIntegration(t *testing.T) {
8082
r = r.WithContext(context.WithValue(r.Context(), requestTimeContextKey, reqTimestamp))
8183
handler.ServeHTTP(w, r)
8284

83-
assert.Equal(t, 202, w.Code)
85+
assert.Equal(t, test.status, w.Code)
8486

8587
}
8688
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"metadata": {"user": null, "process": {"ppid": null, "pid": 1234, "argv": null, "title": null}, "system": null, "service": {"name": "1234_service-12a3", "language": {"version": null, "name":"ecmascript"}, "agent": {"version": "3.14.0", "name": "elastic-node"}, "environment": null, "framework": null,"version": null, "runtime": null}}}
2+
{ "transaction": { "id": 12345, "trace_id": "0123456789abcdef0123456789abcdef", "parent_id": "abcdefabcdef01234567", "type": "request", "duration": 32.592981 } }

0 commit comments

Comments
 (0)