From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 3AB631F626 for ; Mon, 13 Feb 2023 07:55:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1676274939; bh=QVzNC2LIqEaXwTINiIS7E6TVQE/0jZcIsrLVe6PWbY0=; h=From:To:Subject:Date:From; b=miw83Ct1Qj/U/cOfsEX/fSsCI/Rz5qugc+dB3puHHrPuJAmlp1th52yhZrfbxsBaH nvAYZVYvevwmpwX4xICUPagaPafH+IW6S9iD48zR9sHgXP4+xwENDZqLGJDt/YHafQ mBlieISQ6ofCDGRtuVdYUN7tCpkm567b9C97tDfE= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] imap: quiet Parse::RecDescent errors on bad search queries Date: Mon, 13 Feb 2023 07:55:33 +0000 Message-Id: <20230213075533.45233-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Parse::RecDescent emits giant errors to STDERR by default (bypassing $SIG{__WARN__}, even). Shut it up since there's no good way to pass those back to a client, and we don't want clients flooding logs with bogus requests. --- lib/PublicInbox/IMAPsearchqp.pm | 4 +++- t/imap_searchqp.t | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/PublicInbox/IMAPsearchqp.pm b/lib/PublicInbox/IMAPsearchqp.pm index 9f0c1205..0c37220c 100644 --- a/lib/PublicInbox/IMAPsearchqp.pm +++ b/lib/PublicInbox/IMAPsearchqp.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2020-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ # IMAP search query parser. cf RFC 3501 @@ -279,6 +279,8 @@ sub parse { my $sql = ''; %$q = (sql => \$sql, imap => $imap); # imap = PublicInbox::IMAP obj # $::RD_TRACE = 1; + local $::RD_ERRORS = undef; + local $::RD_WARN = undef; my $res = eval { $prd->search_key(uc($query)) }; return $@ if $@ && $@ =~ /\A(?:BAD|NO) /; return 'BAD unexpected result' if !$res || $res != $q; diff --git a/t/imap_searchqp.t b/t/imap_searchqp.t index e2f49e5a..968d4329 100644 --- a/t/imap_searchqp.t +++ b/t/imap_searchqp.t @@ -1,5 +1,5 @@ #!perl -w -# Copyright (C) 2020-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ use strict; use v5.10.1; @@ -29,10 +29,10 @@ is($q->{xap}, 'f:"b"', 'charset handled'); $q = $parse->(qq{CHARSET WTF-8 From b}); like($q, qr/\ANO \[/, 'bad charset rejected'); { - # TODO: squelch errors by default? clients could flood logs - open my $fh, '>:scalar', \(my $buf) or die; + open my $fh, '>:scalar', \(my $buf = '') or die; local *STDERR = $fh; $q = $parse->(qq{CHARSET}); + is($buf, '', 'nothing spewed to STDERR on bad query'); } like($q, qr/\ABAD /, 'bad charset rejected');