amir20/dozzle · warning

minimum must be between 0 and buffer size

Error message

minimum must be between 0 and buffer size

What it means

After parsing the `min` query parameter, fetchLogsBetweenDates range-checks it against 0 and the ring buffer capacity (500). Values outside that range get the fixed message "minimum must be between 0 and buffer size" with HTTP 400 Bad Request. The buffer cannot be sized smaller than 0 or larger than its default capacity.

Solutions

  1. Set min to an integer between 0 and 500 inclusive
  2. Omit `min` to keep the default 500-event buffer
  3. If more than 500 events are needed, use `everything` or adjust from/to date ranges instead of min
  4. Clamp the value client-side before sending

Example fix

// before
const min = 1000; // exceeds buffer size 500
// after
const min = Math.min(Math.max(0, requested), 500);
Defensive patterns

Strategy: validation

Validate before calling

const min = Number.parseInt(raw, 10);
if (!Number.isInteger(min) || min < 0 || min > 500) throw new Error("min out of range");

Prevention

When it happens

Trigger: GET .../logs?min=-1 or ?min=501 (buffer default size is 500). Any negative value or value exceeding 500 triggers the rejection.

Common situations: Clients trying to request 'all logs' with a huge min value; UI sliders misconfigured with negative bounds; code copy-pasted between endpoints with different buffer limits; assuming min is unbounded like a limit parameter.

Understand the failure class

Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.

Related errors


AI-assisted analysis of amir20/dozzle@d9463cbe21 (2026-09-07). Data as JSON: /api/errors/b364a50a3dc02916. Report an issue: GitHub.

Appendix: source

Thrown at internal/web/logs.go:147

	inverse := r.URL.Query().Get("inverse") == "true"

	onlyComplex := r.URL.Query().Has("jsonOnly")
	everything := r.URL.Query().Has("everything")
	if everything {
		from = time.Time{}
		to = time.Now()
	}

	minimum := 0
	buffer := utils.NewRingBuffer[*container.LogEvent](500)
	if r.URL.Query().Has("min") {
		minimum, err = strconv.Atoi(r.URL.Query().Get("min"))
		if err != nil {
			http.Error(w, err.Error(), http.StatusBadRequest)
			return
		}
		if minimum < 0 || minimum > buffer.Size {
			http.Error(w, "minimum must be between 0 and buffer size", http.StatusBadRequest)
			return
		}
		buffer = utils.NewRingBuffer[*container.LogEvent](minimum)
	}

	maxStart := math.MaxInt
	if r.URL.Query().Has("maxStart") {
		maxStart, err = strconv.Atoi(r.URL.Query().Get("maxStart"))
		if err != nil {
			http.Error(w, err.Error(), http.StatusBadRequest)
			return
		}
		if maxStart < 1 || maxStart > buffer.Size {
			http.Error(w, "invalid maxStart", http.StatusBadRequest)
			return
		}
	}

View on GitHub (pinned to d9463cbe21)