go-away icon indicating copy to clipboard operation
go-away copied to clipboard

bug: runtime error: index out of range [-1] when using custom profanity list

Open oneart-dev opened this issue 2 years ago • 0 comments

Describe the bug

Panic error on profanity free message: "Ядром сообщества является команда"

Error log:

2022/12/10 16:06:23 http: panic serving 127.0.0.1:55219: runtime error: index out of range [-1]
goroutine 167 [running]:
net/http.(*conn).serve.func1()
        /usr/local/go/src/net/http/server.go:1850 +0xb0
panic({0x1043c9860, 0x14004732060})
        /usr/local/go/src/runtime/panic.go:890 +0x258
go.opentelemetry.io/otel/sdk/trace.(*recordingSpan).End.func1()
        /Users/oneart/go/pkg/mod/go.opentelemetry.io/otel/[email protected]/trace/span.go:393 +0x2c
go.opentelemetry.io/otel/sdk/trace.(*recordingSpan).End(0x140045ee780, {0x0, 0x0, 0x7700684000817cc0?})
        /Users/oneart/go/pkg/mod/go.opentelemetry.io/otel/[email protected]/trace/span.go:432 +0x6e8
panic({0x1043c9860, 0x14004732060})
        /usr/local/go/src/runtime/panic.go:884 +0x204
github.com/TwiN/go-away.(*ProfanityDetector).Censor(0x140005834a0, {0x140008174c0, 0x3f})
        /Users/oneart/go/pkg/mod/github.com/!twi!n/[email protected]/goaway.go:193 +0x564
github.com/oneart-dev/****/services.publicProfileService.Update({{}, {0x140005834a0}, {0x14000023ab0}, {0x140001248d0}, {0x1044e23f0, 0x1400124ad80}, {0x1044dab90, 0x14001361e60}, {0x1044ef0e0, 0x1400016a100}, ...}, ...)

What do you see?

Panic

What do you expect to see?

It should not touch the string as no profanity in this words

List the steps that must be taken to reproduce this issue

I'm sorry to post this words here :)

profanitiesAll := []string{
		"блять", "блядь", "бляди", "блядина", "блядище", "блядский", "блядство", "блядун", "блядуны", "блядунья", "блядюга", "блядюги", "блядюха", "блядюшка", "блядюшки", "блядюшник", "блядюшница", "блядюшницы", "блядюшничать", "блядюшничество", "блядюшный", "архипиздрит", "басран", "бздение", "бздеть", "бздех", "бзднуть", "бздун", "бздунья", "бздюха", "бикса", "блежник", "блудилище", "бляд", "блябу", "блябуду", "блядун", "блядунья", "блядь", "блядюга", "взьебка", "волосянка", "взьебывать", "вз'ебывать", "выблядок", "выблядыш", "выебать", "выеть", "выпердеть", "высраться", "выссаться", "говенка", "говенный", "говешка", "говназия", "говнецо", "говно", "говноед", "говночист", "говнюк", "говнюха", "говнядина", "говняк", "говняный", "говнять", "гондон", "дермо", "долбоеб", "дрисня", "дрист", "дристать", "дристануть", "дристун", "дристуха", "дрочена", "дрочила", "дрочилка", "дрочить", "дрочка", "ебало", "ебальник", "ебануть", "ебаный", "ебарь", "ебатория", "ебать", "ебаться", "ебец", "ебливый", "ебля", "ебнуть", "ебнуться", "ебня", "ебун", "елда", "елдак", "елдачить", "заговнять", "задристать", "задрока", "заеба", "заебанец", "заебать", "заебаться", "заебываться", "заеть", "залупа", "залупаться", "залупить", "залупиться", "замудохаться", "засерун", "засеря", "засерать", "засирать", "засранец", "засрун", "захуячить", "злоебучий", "изговнять", "изговняться", "кляпыжиться", "курва", "курвенок", "курвин", "курвяжник", "курвяжница", "курвяжный", "манда", "мандавошка", "мандей", "мандеть", "мандища", "мандюк", "минет", "минетчик", "минетчица", "мокрохвостка", "мокрощелка", "мудак", "муде", "мудеть", "мудила", "мудистый", "мудня", "мудоеб", "мудозвон", "муйня", "набздеть", "наговнять", "надристать", "надрочить", "наебать", "наебнуться", "наебывать", "нассать", "нахезать", "нахуйник", "насцать", "обдристаться", "обдристаться", "обосранец", "обосрать", "обосцать", "обосцаться", "обсирать", "опизде", "отпиздячить", "отпороть", "отъеть", "охуевательский", "охуевать", "охуевающий", "охуеть", "охуительный", "охуячивать", "охуячить", "педрик", "пердеж", "пердение", "пердеть", "пердильник", "перднуть", "пердун", "пердунец", "пердунина", "пердунья", "пердуха", "пердь", "передок", "пернуть", "пидор", "пизда", "пиздануть", "пизденка", "пиздеть", "пиздить", "пиздища", "пиздобратия", "пиздоватый", "пиздорванец", "пиздорванка", "пиздострадатель", "пиздун", "пиздюга", "пиздюк", "пиздячить", "писять", "питишка", "плеха", "подговнять", "подъебнуться", "поебать", "поеть", "попысать", "посрать", "поставить", "поцоватый", "презерватив", "проблядь", "проебать", "промандеть", "промудеть", "пропиздеть", "пропиздячить", "пысать", "разъеба", "разъебай", "распиздай", "распиздеться", "распиздяй", "распроеть", "растыка", "сговнять", "секель", "серун", "серька", "сика", "сикать", "сикель", "сирать", "сирывать", "скурвиться", "скуреха", "скурея", "скуряга", "скуряжничать", "спиздить", "срака", "сраный", "сранье", "срать", "срун", "ссака", "ссаки", "ссать", "старпер", "струк", "суходрочка", "сцавинье", "сцака", "сцаки", "сцание", "сцать", "сциха", "сцуль", "сцыха", "сыкун", "титечка", "титечный", "титка", "титочка", "титька", "трипер", "триппер", "уеть", "усраться", "усцаться", "фик", "фуй", "хезать", "хер", "херня", "херовина", "херовый", "хитрожопый", "хлюха", "хуевина", "хуевый", "хуек", "хуепромышленник", "хуерик", "хуесос", "хуище", "хуй", "хуйня", "хуйрик", "хуякать", "хуякнуть", "целка", "шлюха",
	}

	profanitiesAll = append(profanitiesAll, goaway.DefaultProfanities...)
	falsePositives := goaway.DefaultFalsePositives
	falseNegatives := goaway.DefaultFalsePositives

	profanityDetector := goaway.NewProfanityDetector().WithCustomDictionary(profanitiesAll, falsePositives, falseNegatives)

profanityDetector.Censor("Ядром сообщества является команда")

Version

1.6.8

Additional information

If I remove my list of profanities all seems to work fine.

oneart-dev avatar Dec 10 '22 16:12 oneart-dev