Bug 14526 - possible wrong behaviour with patterns with double [ with no closing ]
Summary: possible wrong behaviour with patterns with double [ with no closing ]
Status: NEW
Alias: None
Product: Busybox
Classification: Unclassified
Component: Standard Compliance (show other bugs)
Version: unspecified
Hardware: Other Other
: P5 critical
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-01-17 03:28 UTC by Christoph Anton Mitterer
Modified: 2022-01-21 11:55 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christoph Anton Mitterer 2022-01-17 03:28:46 UTC
Hey.


Assuming a pattern of:
[.*^\]
my understanding was that this would actually mean:
- the literal string [. followed by
- the pattern notation special character * (i.e. any string) followed by
- the literal string ^]

Because ] is escaped, it's to be taken literally and in a pattern a [
without corresponding ] is to be taken literally as well.
(see POSIX, https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13 )

That seems to work in busybox sh:
$ case '[.^]' in ([.*^\]) echo match;; (*) echo no match;; esac
match
$ case '[.x^]' in ([.*^\]) echo match;; (*) echo no match;; esac
match
$ case '[.xx^]' in ([.*^\]) echo match;; (*) echo no match;; esac
match


However, adding another [ to the pattern:
[.*^[\]
which should be:
- the literal string [. followed by
- the pattern notation special character * (i.e. any string) followed by
- the literal string ^[]

No longer matches:
$ case '[.^[]' in ([.*^[\]) echo match;; (*) echo no match;; esac
no match
$ case '[.x^[]' in ([.*^[\]) echo match;; (*) echo no match;; esac
no match
$ case '[.xx^[]' in ([.*^[\]) echo match;; (*) echo no match;; esac
no match


Whereas, AFAIU POSIX, it should.

This works, btw. in bash, but neither in dash, nor klibc sh.


Cheers,
Chris.
Comment 1 Christoph Anton Mitterer 2022-01-18 14:27:56 UTC
If busybox sh would use glibc's fnmatch() for this, then this may also be a bug there.

See:
https://lore.kernel.org/dash/YeZbt7nhvODBSL0I@gondor.apana.org.au/T/#m090520913643547feccac71ed6e6f48219fb5988

respectively:
https://sourceware.org/bugzilla/show_bug.cgi?id=28792