[pacman-dev] [PATCH] repo-remove: Fix infinite loop when given a pkgname ending in '*'
Eli Schwartz
eschwartz at archlinux.org
Sun Apr 28 03:22:40 UTC 2019
On 4/27/19 11:00 PM, Allan McRae wrote:
> On 28/4/19 12:49 pm, Eli Schwartz wrote:
>> On 4/27/19 4:38 AM, Ralph Corderoy wrote:
>>> Hi Jan,
>>>
>>>>> This happens because find_pkgentry() fails to account the case where
>>>>> globbing fails and the expression is taken literally.
>>>>
>>>> Maybe we should use failglob instead to provoke an error?
>>>
>>> Wouldn't nullglob be better to skip the loop's body?
>>>
>>> $ touch foo bar
>>> $ ls
>>> bar foo
>>> $
>>> $ shopt -u nullglob failglob
>>> $ for f in *; do echo = $f; done
>>> = bar
>>> = foo
>>> $ rm foo
>>> $ for f in *; do echo = $f; done
>>> = bar
>>> $ rm bar
>>> $ for f in *; do echo = $f; done
>>> = *
>>> $
>>> $ touch foo bar
>>> $ shopt -s nullglob
>>> $ for f in *; do echo = $f; done
>>> = bar
>>> = foo
>>> $ rm foo
>>> $ for f in *; do echo = $f; done
>>> = bar
>>> $ rm bar
>>> $ for f in *; do echo = $f; done
>>> $
>>
>> All three of you are wrong, or at least missing the point. :)
>>
>> [[ foo = f* ]] is defined to have pattern-matching context, and in this
>> case, [[ pkgname* = pkgname** ]] matches true. If we do not want this
>> behavior, we need to quote this -- and by properly quoting where we are
>> supposed to quote, we don't need to stat for file existence, we don't
>> need to change the way the whole script handles globs, and we still get
>> the failing action we want. To be more precise, we get the exact
>> behavior and method of acquiring that behavior, which was originally
>> intended.
>>
>> There are also other cases where this could matter, some of which are
>> long shots.
>>
>
> We probably need to work on the enforcement of pkgname rules from
> makepkg into repo-add as well:
>
> pkgname (array)
> Either the name of the package or an array of names for split
> packages. Valid characters for members of this array are
> alphanumerics, and any of the following characters: “@ . _ + -”.
> Additionally, names are not allowed to start with hyphens or dots.
>
> Can probably link in libmakepkg into here to do so. Although I'd like
> to move repo-add to using libalpm, and we need to enforce rules here too...
Moving to libalpm would be nice, also because repo-add is some hairy
code and I'm almost afraid to touch it. :p
I'm unsure what some of the logic in there is doing. Spent like 15
minutes trying to figure out why db_remove_entry is even an infinite
loop at all (but then Andrew pointed out even if we don't support
multiple versions of a pkgname in a database, it probably makes sense to
not fail to remove them if they get created some other way).
--
Eli Schwartz
Bug Wrangler and Trusted User
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 1601 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/pacman-dev/attachments/20190427/0f475ab4/attachment-0001.sig>
More information about the pacman-dev
mailing list