Skip to content

Invalid server URL format (IP without scheme) results in panic while calling WriteAPIBlocking #422

Open
@judehung

Description

@judehung

Specifications

  • Client Version: 2.14.0
  • InfluxDB Version: None
  • Platform: Ubuntu 24.02 arm64

Steps to reproduce

I intentionally provided an invalid server URL (an IP address without scheme) when creating a client. This causes a panic when calling WriteAPIBlocking to initialize the Write API. The sample code below reproduces the issue:

package main

import (
	"context"
	"fmt"
	"time"

	influxdb2 "github.com/influxdata/influxdb-client-go/v2"
)

func main() {
	// InfluxDB connection settings
	const (
		token  = "custom-token"
		url    = "192.168.1.104:8086"
		org    = "judehung"
		bucket = "jude-bucket"
	)

	// Create a new InfluxDB client
	client := influxdb2.NewClient(url, token)
	defer client.Close()

	// Get the write API
	writeAPI := client.WriteAPIBlocking(org, bucket)

	// Create a point to write
	point := influxdb2.NewPoint(
		"temperature",                           // Measurement name
		map[string]string{"location": "office"}, // Tags
		map[string]interface{}{"value": 23.5},   // Fields
		time.Now(),                              // Timestamp
	)

	// Write the point to InfluxDB
	err := writeAPI.WritePoint(context.Background(), point)
	if err != nil {
		fmt.Printf("Error writing to InfluxDB: %v\n", err)
		return
	}

	fmt.Println("Data written successfully to InfluxDB!")
}

Expected behavior

I understand that the current NewClient(url, token) API doesn't return an error during client creation, even with an improperly formatted URL. However, it might be a better design to validate the URL and return an error upfront—such as when an IP address is provided without a scheme—to help prevent runtime panics for library users.

func NewClient(serverURL string, authToken string) (Client, error)

Actual behavior

A panic will directly occur when invoking on client.WriteAPIBlocking(org, bucket)

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x8 pc=0x102567698]

goroutine 1 [running]:
net/url.(*URL).ResolveReference(0x0, 0x14000158360)
	/usr/local/go/src/net/url/url.go:1115 +0x88
net/url.(*URL).Parse(0x0, {0x1026a3104?, 0xb?})
	/usr/local/go/src/net/url/url.go:1103 +0x4c
github.com/influxdata/influxdb-client-go/v2/internal/write.NewService({0x1026a39e6, 0x8}, {0x1026a490d, 0xb}, {0x1027c8490, 0x140001600a0}, 0x14000167260)
	/Users/judehung/go/pkg/mod/github.com/influxdata/influxdb-client-go/v2@v2.14.0/internal/write/service.go:77 +0x7c
github.com/influxdata/influxdb-client-go/v2/api.NewWriteAPIBlocking(...)
	/Users/judehung/go/pkg/mod/github.com/influxdata/influxdb-client-go/v2@v2.14.0/api/writeAPIBlocking.go:63
github.com/influxdata/influxdb-client-go/v2.(*clientImpl).WriteAPIBlocking(0x14000142240, {0x1026a39e6, 0x8}, {0x1026a490d, 0xb})
	/Users/judehung/go/pkg/mod/github.com/influxdata/influxdb-client-go/v2@v2.14.0/client.go:239 +0x150
main.main()
	/Users/judehung/MyWork/Repos/PersonalTry/influx-test/main.go:25 +0x94

Additional info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions