[openpgp] Possible ambiguity in description of regular expressions: [^][]

"Neal H. Walfield" <neal@walfield.org> Wed, 23 December 2020 21:58 UTC

Return-Path: <neal@walfield.org>
X-Original-To: openpgp@ietfa.amsl.com
Delivered-To: openpgp@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 180A43A0E7C for <openpgp@ietfa.amsl.com>; Wed, 23 Dec 2020 13:58:42 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.898
X-Spam-Level:
X-Spam-Status: No, score=-1.898 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_NONE=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id A66x3Fw6wox8 for <openpgp@ietfa.amsl.com>; Wed, 23 Dec 2020 13:58:40 -0800 (PST)
Received: from mail.dasr.de (mail.dasr.de [217.69.77.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 4861D3A0E8C for <openpgp@ietf.org>; Wed, 23 Dec 2020 13:58:39 -0800 (PST)
Received: from pd9e79cc0.dip0.t-ipconnect.de ([217.231.156.192] helo=forster.huenfield.org) by mail.dasr.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.86_2) (envelope-from <neal@walfield.org>) id 1ksC9V-0004Ju-SG for openpgp@ietf.org; Wed, 23 Dec 2020 21:58:37 +0000
Received: from grit.huenfield.org ([192.168.20.9] helo=grit.walfield.org) by forster.huenfield.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <neal@walfield.org>) id 1ksC9V-0006RJ-CZ for openpgp@ietf.org; Wed, 23 Dec 2020 22:58:37 +0100
Date: Wed, 23 Dec 2020 22:58:37 +0100
Message-ID: <87r1nguquq.wl-neal@walfield.org>
From: "Neal H. Walfield" <neal@walfield.org>
To: openpgp@ietf.org
User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (Gojō) APEL/10.8 EasyPG/1.0.0 Emacs/26 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)
MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue")
Content-Type: text/plain; charset="US-ASCII"
X-SA-Exim-Connect-IP: 192.168.20.9
X-SA-Exim-Mail-From: neal@walfield.org
X-SA-Exim-Scanned: No (on forster.huenfield.org); SAEximRunCond expanded to false
Archived-At: <https://mailarchive.ietf.org/arch/msg/openpgp/OSlcKvw2IIBmBuZMtQ5vWE_UPxU>
Subject: [openpgp] Possible ambiguity in description of regular expressions: [^][]
X-BeenThere: openpgp@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Ongoing discussion of OpenPGP issues." <openpgp.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/openpgp>, <mailto:openpgp-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/openpgp/>
List-Post: <mailto:openpgp@ietf.org>
List-Help: <mailto:openpgp-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/openpgp>, <mailto:openpgp-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 23 Dec 2020 21:58:42 -0000

The description of regular expressions in Section 8 of 4880
(https://tools.ietf.org/html/rfc4880#section-8) says:

  A range is a sequence of characters enclosed in '[]'.  It normally
  matches any single character from the sequence.

Is an empty sequence allowed?  If so,

  []                  (1)

is a valid regular expression meaning *no match*.

  If the sequence begins with '^', it matches any single character not
  from the rest of the sequence.

Even if we assume that a sequence is non-empty, the rest of a one
character sequence after removing the first character is empty.  So,
it sounds like:

  [^]                 (2)

is definitely a valid regular expression meaning *match anything*.

  To include a literal ']' in the sequence, make it the first
  character (following a possible '^').

So, to match anything but a literal ']' we have to use:

  [^]]                (3)

And to match anything but '[' or ']' we have to use:

  [^][]               (4)

Wait... that can also be parsed as match anything (2) followed by
match nothing (1)!


Perhaps I'm misreading the standard.  I'd appreciate confirmation or
any help clarifying my mistake.

Thanks,

:) Neal