Received: from mail.netlandish.com (mail.netlandish.com [174.136.98.166]) by code.netlandish.com (Postfix) with ESMTP id A9C7DA4 for <~netlandish/links-dev@lists.code.netlandish.com>; Thu, 20 Mar 2025 14:13:47 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.160.182; helo=mail-qt1-f182.google.com; envelope-from=peter@netlandish.com; receiver= Authentication-Results: mail.netlandish.com; dkim=pass (1024-bit key; unprotected) header.d=netlandish.com header.i=@netlandish.com header.b=aqAcp6/+ Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182]) by mail.netlandish.com (Postfix) with ESMTP id C82031D642E for <~netlandish/links-dev@lists.code.netlandish.com>; Thu, 20 Mar 2025 14:13:46 +0000 (UTC) Received: by mail-qt1-f182.google.com with SMTP id d75a77b69052e-476ae781d21so7960931cf.3 for <~netlandish/links-dev@lists.code.netlandish.com>; Thu, 20 Mar 2025 07:13:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netlandish.com; s=google; t=1742480026; x=1743084826; darn=lists.code.netlandish.com; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=d+8uipqBDA1k5IgGyAQsFcQNGtKI6R03V8S6McMOBUs=; b=aqAcp6/+spJwHouD+a6CAeWyFgooUXb0yWQVGJcQ8Xc0vNYrRd59kZu5t5pUpYyUh0 5cVtg9tDFgUSc6Eqw/QOxkiTAtyUNtNdloSeFwMI4pn2bjXqvHDmQIThvKb3aTyzwRv0 LTdd79ohYvLLifjyAAZJEgNuP9M+/i0J50UpU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742480026; x=1743084826; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=d+8uipqBDA1k5IgGyAQsFcQNGtKI6R03V8S6McMOBUs=; b=Xd2YAQvLkzWY+N0jC6cqxs5kqA0uMJInCVjZhw79wyxGag8vcoJ+1s7wGDrImR1FS9 CMgbcuwVH4t9lYsW3ZvRg8ihMbtpHgwm0//uTJgbbXwA8OHKSjQwr4MBJXnmI/oMk++B zK2cD/BXuR8b2o7iHQ9GZjLn/oxyFUq+cH5wj8bInFf0lHUsp7F+tC9zfKEXs4Szcum5 mavN0UAdP7v3LtMVBtiIGNzRddEk5LVwWLjRzQdMgKoJdjuJP4izswAJpQ9bzsPcjzOn ldbRhxsdcpSlFvg+nsvodjwKMiR8/rcgtfPadcW0oHyK/iG6pr8aUea11wZT5MqY4YPK z1SA== X-Gm-Message-State: AOJu0YwK/y2T7GRowAHhcAJpgVErgjngS3pHWdW4/SLwXR6S8Gib0DUk DcxOR+4EpPWX0vVUyaQ+z/k+oVBh3rk4q743IyiqJeHRQRNKNSkUGEsnOls45V7Gg1aH/TLq/W0 91D0= X-Gm-Gg: ASbGncugUoBv8Q+hz24eaewi7ugqew42nIDkmhaGLe68cozWZTSBKmShHL2SenM/QUs 2z8moQ6+NaSQwInyXp1dOazf8SXZibBUjME/hVvz2JkkcllkgHEufUgMAvu/AvKJ+6J5jtRxZcM FKd1mAngBSnrmM6T5clSrGDuRokWwDDAaNXXMfQUbYtXRFdfRBPifJt0kRSClYxx4tfvZCAg/4L kGuLPHbY5tQuoMOPk5P7h0GQUL7kW77is4Xt0RijKbSvxgcHyaRBNy9uAP8RcnOCPwKmWLxgGBC uMeIV92WiVqL2SUaM6oTS9ipsXKSPNc5tXlrA/vdKE14YQ== X-Google-Smtp-Source: AGHT+IHxpGIqIaGX6pVkqvBy6bx4+L8Ds3NihG9NPG9BRV3fSMPe8WHx6ZIHfbtZkwDEsGvlEn3XEQ== X-Received: by 2002:a05:622a:7392:b0:476:abd1:7101 with SMTP id d75a77b69052e-477083fa81emr81388651cf.46.1742480025261; Thu, 20 Mar 2025 07:13:45 -0700 (PDT) Received: from localhost ([2803:2d60:1107:87f:1bdb:671e:186f:13f9]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-86d90d939b1sm2795448241.13.2025.03.20.07.13.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 07:13:44 -0700 (PDT) From: Peter Sanchez To: ~netlandish/links-dev@lists.code.netlandish.com Cc: Peter Sanchez Subject: [PATCH links] Fixing bug when no valid input is given to the tsquery conversion. Date: Thu, 20 Mar 2025 08:13:38 -0600 Message-ID: <20250320141342.17989-1-peter@netlandish.com> X-Mailer: git-send-email 2.47.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Fixed: ISE when no valid input is given to a query used in tsquery conversions. Signed-off-by: Peter Sanchez --- core/routes.go | 11 ++++++----- helpers.go | 12 +++++++----- migrations/0006_update_auditlog_metadata.down.sql | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/core/routes.go b/core/routes.go index 661c1d9..5d2995b 100644 --- a/core/routes.go +++ b/core/routes.go @@ -3187,13 +3187,14 @@ func (s *Service) TagAutocomplete(c echo.Context) error { gctx := c.(*server.Context) user := gctx.User.(*models.User) orgID := c.QueryParam("org") - q := c.QueryParam("q") - var tags []*models.Tag - var err error + q := links.ParseSearch(c.QueryParam("q")) + var ( + tags []*models.Tag + err error + ) if q != "" { - s := links.ParseSearch(q) opts := &database.FilterOptions{ - Filter: sq.Expr(`to_tsvector('simple', t.name) @@ to_tsquery('simple', ?)`, s), + Filter: sq.Expr(`to_tsvector('simple', t.name) @@ to_tsquery('simple', ?)`, q), } if orgID != "" { opts.Filter = sq.And{ diff --git a/helpers.go b/helpers.go index e1da322..9f86203 100644 --- a/helpers.go +++ b/helpers.go @@ -864,12 +864,14 @@ func ParseSearch(s string) string { var words []string for _, word := range strings.Split(s, " ") { // This is used for to_tsquery searches (tag autocomplete) - word = strings.TrimSpace(word) - word = strings.Replace(word, ":", "\\:", -1) - if !strings.HasPrefix(word, "-") { - word = word + ":*" + if len(word) > 0 { + word = strings.TrimSpace(word) + word = strings.Replace(word, ":", "\\:", -1) + if !strings.HasPrefix(word, "-") { + word = word + ":*" + } + words = append(words, word) } - words = append(words, word) } s = strings.Join(words, " & ") return s diff --git a/migrations/0006_update_auditlog_metadata.down.sql b/migrations/0006_update_auditlog_metadata.down.sql index 5297243..da8c679 100644 --- a/migrations/0006_update_auditlog_metadata.down.sql +++ b/migrations/0006_update_auditlog_metadata.down.sql @@ -1,3 +1,3 @@ UPDATE audit_log SET metadata = metadata - 'org_slug' WHERE metadata ? 'org_slug'; UPDATE audit_log SET metadata = metadata - 'list_slug' WHERE metadata ? 'list_slug'; -DROP INDEX audit_log_metadata_gin; +DROP INDEX IF EXISTS audit_log_metadata_gin; -- 2.47.2