mirror of
https://github.com/prometheus/alertmanager
synced 2025-02-16 10:37:09 +00:00
nflog: fix potential panic in decodeState()
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
This commit is contained in:
parent
b1625a08a0
commit
a8c995f77c
@ -37,6 +37,9 @@ import (
|
|||||||
// ErrNotFound is returned for empty query results.
|
// ErrNotFound is returned for empty query results.
|
||||||
var ErrNotFound = errors.New("not found")
|
var ErrNotFound = errors.New("not found")
|
||||||
|
|
||||||
|
// ErrInvalidState is returned if the state isn't valid.
|
||||||
|
var ErrInvalidState = fmt.Errorf("invalid state")
|
||||||
|
|
||||||
// query currently allows filtering by and/or receiver group key.
|
// query currently allows filtering by and/or receiver group key.
|
||||||
// It is configured via QueryParameter functions.
|
// It is configured via QueryParameter functions.
|
||||||
//
|
//
|
||||||
@ -239,6 +242,9 @@ func decodeState(r io.Reader) (state, error) {
|
|||||||
var e pb.MeshEntry
|
var e pb.MeshEntry
|
||||||
_, err := pbutil.ReadDelimited(r, &e)
|
_, err := pbutil.ReadDelimited(r, &e)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
if e.Entry == nil || e.Entry.Receiver == nil {
|
||||||
|
return nil, ErrInvalidState
|
||||||
|
}
|
||||||
st[stateKey(string(e.Entry.GroupKey), e.Entry.Receiver)] = &e
|
st[stateKey(string(e.Entry.GroupKey), e.Entry.Receiver)] = &e
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -296,3 +296,14 @@ func TestQuery(t *testing.T) {
|
|||||||
require.EqualValues(t, firingAlerts, entry.FiringAlerts)
|
require.EqualValues(t, firingAlerts, entry.FiringAlerts)
|
||||||
require.EqualValues(t, resolvedAlerts, entry.ResolvedAlerts)
|
require.EqualValues(t, resolvedAlerts, entry.ResolvedAlerts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStateDecodingError(t *testing.T) {
|
||||||
|
// Check whether decoding copes with erroneous data.
|
||||||
|
s := state{"": &pb.MeshEntry{}}
|
||||||
|
|
||||||
|
msg, err := s.MarshalBinary()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = decodeState(bytes.NewReader(msg))
|
||||||
|
require.Equal(t, ErrInvalidState, err)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user