Skip to content

Commit 290d2d1

Browse files
committed
fix(config): reject negative plugins.lua.dispatcher_queue_size
A negative value passed through cmp.Or unchanged in applyDefaults and only failed at runtime as a plugin-init warn log, silently disabling the Lua plugin. Validate >= 0 in Validate() so misconfiguration is caught before startup. Zero remains valid as the unset sentinel that applyDefaults resolves to 128.
1 parent ec69e14 commit 290d2d1

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

internal/core/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,7 @@ func (c *Config) Validate() error {
902902
criterio.Run("database.max_open_conns", c.Database.MaxOpenConns, criterio.Min(1)),
903903
criterio.Run("database.max_idle_conns", c.Database.MaxIdleConns, criterio.Min(1)),
904904
criterio.Run("database.busy_timeout", c.Database.BusyTimeout, criterio.Min(0)),
905+
criterio.Run("plugins.lua.dispatcher_queue_size", c.Plugins.Lua.DispatcherQueueSize, criterio.Min(0)),
905906
c.validateTheme(),
906907
c.validateGroupBy(),
907908
c.validateKeybindingsBasic(),

internal/core/config/lua_plugin_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,34 @@ func TestValidate_LuaPluginEntryRejectsRelativePath(t *testing.T) {
127127
assert.Equal(t, "plugins.lua.entry", fieldErrs[0].Field)
128128
assert.Contains(t, fieldErrs[0].Err.Error(), "must be an absolute path")
129129
}
130+
131+
func TestValidate_LuaPluginDispatcherQueueSize(t *testing.T) {
132+
tests := []struct {
133+
name string
134+
size int
135+
wantErr bool
136+
}{
137+
{"default fills via applyDefaults", 0, false},
138+
{"explicit small positive", 1, false},
139+
{"explicit large positive", 1024, false},
140+
{"negative rejected", -1, true},
141+
}
142+
143+
for _, tt := range tests {
144+
t.Run(tt.name, func(t *testing.T) {
145+
cfg := validConfig(t)
146+
cfg.Plugins.Lua.DispatcherQueueSize = tt.size
147+
cfg.applyDefaults()
148+
149+
err := cfg.Validate()
150+
if tt.wantErr {
151+
var fieldErrs criterio.FieldErrors
152+
require.ErrorAs(t, err, &fieldErrs)
153+
require.Len(t, fieldErrs, 1)
154+
assert.Equal(t, "plugins.lua.dispatcher_queue_size", fieldErrs[0].Field)
155+
return
156+
}
157+
require.NoError(t, err)
158+
})
159+
}
160+
}

0 commit comments

Comments
 (0)