Received: from mail.netlandish.com (mail.netlandish.com [174.136.98.166]) by code.netlandish.com (Postfix) with ESMTP id AE774E1 for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 29 Aug 2025 20:49:33 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.217.43; helo=mail-vs1-f43.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=RzIXYCFW Received: from mail-vs1-f43.google.com (mail-vs1-f43.google.com [209.85.217.43]) by mail.netlandish.com (Postfix) with ESMTP id D46C91D6463 for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 29 Aug 2025 20:50:30 +0000 (UTC) Received: by mail-vs1-f43.google.com with SMTP id ada2fe7eead31-52a80b778e7so239598137.1 for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 29 Aug 2025 13:50:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netlandish.com; s=google; t=1756500630; x=1757105430; 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=393G1S+7jqT1AVAAILI1XrFY/GZlGPYzLu9aKsKllpg=; b=RzIXYCFWTvCqfc+FFpt70Xl/Wcsai3VzZ+KZhGC8P89UkvIVfKqHL/amu5nkoOd4C4 1d2Fyf3qzXLoyUUm971DYnga7U217zjSyBYZS2g3MtCKAM/T0ZscpV/B+A70C2Re110j diLhh+mVFuu+HiybaTSVC7qFnXX88gTdgjLKs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756500630; x=1757105430; 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=393G1S+7jqT1AVAAILI1XrFY/GZlGPYzLu9aKsKllpg=; b=QKqkY/eVrB40PY/TS7uxAugh4IRnfdowoNhzG8Ce2+NV2DjTbyJI7veMsMKmtWbGWP yFvWkWSfOKpOdu1pWFeFcvilMhJSr2BnTjayfgBfdAYf4ytq1hbKAgYb8LEsWMsgDZLb 2Q6rVY/TMq50Xr2gX9ITod+nvDb2MZqcA91ODUNnNrMg8G7mAn+qTkr5VqY1eCIifZUK oYW+KtbBiWHL4hpz4FDW7WmD4PNvtKaS9X+ugLP+LtHkaTZbOMs7UzzEY3yW2Vhxx9Yz ixg8KtDq1oHJ1VXwAhJLXZlTxjhHmwhPaZwKTGxFYHAjUvusgI44Zu8KPx3sMTE3Mkx6 XGgQ== X-Gm-Message-State: AOJu0YwxH3Wnsi2ZdwE48DjT9eULR9zfq278QmXFtsqPpmetlcwX4MBI agkOhTDAuLQMOpJOwjf2eGW9yaDoafiqBb+c3Z8MQrBaIMoRWND8mNNyz9BZ2wY2ft1xtVCqr+j 05kzIqgo= X-Gm-Gg: ASbGncunSY0zoL279BACO1sD5eNbXMJtVIlQNKpJ/Hv5hYvv8B5SBXJMRP9Rkj5hp7Q YOrxgTyEPFRilcQnBI1SknXUOH7/x0k0Bhi9vmmgrrWuADKVThvifXqhgv63rgUyZGG+8hNfSul VOWr9+8G8QWnGwe2Kt6V+CRce/sWb7wnNA66J7bU4oJj5yF+AP4UWrA+ecK9MPWWOZBOGZ6c0EE ohlyztOS0c4DdmFuheQg007lupIejl2Vl1jSibhxXUY1TwzvSjUzFwANFwiAjqpFGOmO4MoGqvp 0PRzJTUxwYa+jKDzUilmOWcGpKR5Y66jiN/Jdq+VbdLhYR5R9Jynwq3TYjRlc7gZ9mtU7bTa4Uf h4J7ZbR5+YQNDYTvAlYSUxlQ= X-Google-Smtp-Source: AGHT+IHKZMv62TGvuXLYv4hnPMrY5aBzr+rEmpyAKQwHn4BBsIvU6uZrV2HhAERzdg7sY6cEymWLkg== X-Received: by 2002:a05:6102:800e:b0:523:22e2:e894 with SMTP id ada2fe7eead31-527a1a51539mr3490399137.28.1756500629526; Fri, 29 Aug 2025 13:50:29 -0700 (PDT) Received: from localhost ([2803:2d60:1107:87f:7a73:f96b:ede1:b448]) by smtp.gmail.com with UTF8SMTPSA id ada2fe7eead31-52af1e46f50sm182207137.14.2025.08.29.13.50.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 13:50:28 -0700 (PDT) From: Peter Sanchez To: ~netlandish/links-dev@lists.code.netlandish.com Cc: Peter Sanchez Subject: [PATCH links] Fixes a bug when a user submits all invalid tags we don't try to do an empty insert. Caused by spammers but a bug none the less. Date: Fri, 29 Aug 2025 14:50:24 -0600 Message-ID: <20250829205026.8824-1-peter@netlandish.com> X-Mailer: git-send-email 2.49.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Changelog-fixed: Edge case where all submitted tags are invalid resulting in an sql error (empty insert). --- models/org_link.go | 3 +++ models/tag_link_shorts.go | 3 +++ models/tag_links.go | 3 +++ models/tag_listing.go | 3 +++ 4 files changed, 12 insertions(+) diff --git a/models/org_link.go b/models/org_link.go index 330894c..9e4829e 100644 --- a/models/org_link.go +++ b/models/org_link.go @@ -272,6 +272,9 @@ func GetOrgLinksAnalytics(ctx context.Context, opts *database.FilterOptions) ([] } func OrgLinkStoreBatch(ctx context.Context, links []*OrgLink) error { + if len(links) == 0 { + return nil + } err := database.WithTx(ctx, nil, func(tx *sql.Tx) error { batch := sq. Insert("org_links"). diff --git a/models/tag_link_shorts.go b/models/tag_link_shorts.go index 4e0bc6b..6530864 100644 --- a/models/tag_link_shorts.go +++ b/models/tag_link_shorts.go @@ -61,6 +61,9 @@ func GetTagLinkShort(ctx context.Context, id int) (*TagLinkShort, error) { } func CreateBatchTagLinkShorts(ctx context.Context, linkShortID int, tagIDs []int) error { + if len(tagIDs) == 0 { + return nil + } err := database.WithTx(ctx, nil, func(tx *sql.Tx) error { var err error q := sq. diff --git a/models/tag_links.go b/models/tag_links.go index beaf159..9c6a634 100644 --- a/models/tag_links.go +++ b/models/tag_links.go @@ -61,6 +61,9 @@ func GetTagLink(ctx context.Context, id int) (*TagLink, error) { } func CreateBatchTagLinks(ctx context.Context, linkID int, tagIDs []int) error { + if len(tagIDs) == 0 { + return nil + } err := database.WithTx(ctx, nil, func(tx *sql.Tx) error { var err error q := sq. diff --git a/models/tag_listing.go b/models/tag_listing.go index a11a110..a0f05b3 100644 --- a/models/tag_listing.go +++ b/models/tag_listing.go @@ -61,6 +61,9 @@ func GetTagListing(ctx context.Context, id int) (*TagListing, error) { } func CreateBatchTagListings(ctx context.Context, linkShortID int, tagIDs []int) error { + if len(tagIDs) == 0 { + return nil + } err := database.WithTx(ctx, nil, func(tx *sql.Tx) error { var err error q := sq. -- 2.49.1