[PATCH 5/5] gpg: Fix regexp sanitization.

John O'Meara john.fr.omeara at gmail.com
Wed Jul 19 14:55:34 CEST 2017


Quoth Justus Winter <justus at g10code.com> on Wed, 19 Jul 2017 13:22:29 +0200:

> Damien Goutte-Gattat <dgouttegattat at incenp.org> writes:
> 
>> This patch updates the function to escape only the meaningful
>> characters (minus the dot).
> 
> I'm not convinced that this patch is correct.  I'm not convinced that we
> should attempt any kind of sanitization at all.  This happens right
> before the expression is fed to the regex engine.  I could somehow
> understand that we do sanitization or try to suggest improvements when
> users enter an expression, but not when interpreting expressions found
> in keys.
> 
> Imagine I have for some reason the expression 'foo.*\.org' in a trust
> signature, because I only want to match organisations starting with foo.
> RFC4880 seems to allow that aiui.  Your patch breaks that, but so does
> sanitize_regexp as it is now.
> 
> 
> I don't see how and why we should do any sane sanitization at all.
> 
> Discuss!

As I see it, the problem is that the OpenPGP regex dialect
(from RFC4880) is different than the one that POSIX uses. I
can see 3 options for dealing with the difference:

 1: Implement the RFC4880 dialect ourselves. This seems
    error prone and a 'reinvention of the wheel'.

 2: Utilize the regex implementation specified in RFC4880. I
    presume this wasn't done due to license incompatibility
    (but I don't actually know).

 3: Convert from RFC4880 regex dialect to POSIX dialect and
    then feed the result to the POSIX engine.
    
The latter is what I attempted in my January patch, and for
the purpose of covering cases like the 'foo.*\.org' case you
mention. For my own purposes, I needed to select 2 domains,
so I needed something like '(domA|domB)\.com', which my
patch also covered. (However, I didn't have any coded tests
for it)

I think option 2 would be the best, if possible, because
then there shouldn't be any weird corner cases to worry
about.

I am happy in the short term for Damien's patches, since
they provide the testing foundation and the sanitation
update at least allows simple trust signatures to work now.

-- 
John O'Meara



More information about the Gnupg-devel mailing list