From e4b4594fb453ff1a59018eaa71fc0cba453eceb3 Mon Sep 17 00:00:00 2001 From: Andreas Bergmeier Date: Sun, 23 Jan 2022 21:41:51 +0100 Subject: [PATCH] Prevent crash when Exporter is not TracerDelegate There is no enforcing Exporter + TracerDelegate via type system nor by rigorous runtime checking. Thus the code previously crashed since `withTracerDelegate` (nor any callers) check whether embedded `TracerDelegate` is `nil`. Now only passes `withTracerDelegate` if it can actually be called. Signed-off-by: Andreas Bergmeier --- driver/docker-container/driver.go | 14 ++++++++++---- driver/kubernetes/driver.go | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/driver/docker-container/driver.go b/driver/docker-container/driver.go index 78538c85..63e97444 100644 --- a/driver/docker-container/driver.go +++ b/driver/docker-container/driver.go @@ -341,11 +341,17 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) { return nil, err } - td, _ := exp.(client.TracerDelegate) + clientOpts := []client.ClientOpt{ + client.WithContextDialer(func(context.Context, string) (net.Conn, error) { + return conn, nil + }), + } + + if td, _ := exp.(client.TracerDelegate); td != nil { + clientOpts = append(clientOpts, client.WithTracerDelegate(td)) + } - return client.New(ctx, "", client.WithContextDialer(func(context.Context, string) (net.Conn, error) { - return conn, nil - }), client.WithTracerDelegate(td)) + return client.New(ctx, "", clientOpts...) } func (d *Driver) Factory() driver.Factory { diff --git a/driver/kubernetes/driver.go b/driver/kubernetes/driver.go index 92725dff..60f83da9 100644 --- a/driver/kubernetes/driver.go +++ b/driver/kubernetes/driver.go @@ -211,11 +211,17 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) { return nil, err } - td, _ := exp.(client.TracerDelegate) + clientOpts := []client.ClientOpt{ + client.WithContextDialer(func(context.Context, string) (net.Conn, error) { + return conn, nil + }), + } + + if td, _ := exp.(client.TracerDelegate); td != nil { + clientOpts = append(clientOpts, client.WithTracerDelegate(td)) + } - return client.New(ctx, "", client.WithContextDialer(func(context.Context, string) (net.Conn, error) { - return conn, nil - }), client.WithTracerDelegate(td)) + return client.New(ctx, "", clientOpts...) } func (d *Driver) Factory() driver.Factory {