[PATCH 1/3] libshell: fix subtle section parsing bug
Keller, Jacob E
jacob.e.keller at intel.com
Wed May 28 14:18:01 PDT 2014
> -----Original Message-----
> From: Alexey Gladkov [mailto:legion at altlinux.ru]
> Sent: Wednesday, May 28, 2014 6:10 AM
> To: dedekind1 at gmail.com; Keller, Jacob E
> Cc: aiaiai at lists.infradead.org
> Subject: Re: [PATCH 1/3] libshell: fix subtle section parsing bug
>
> 28.05.2014 11:10, кон Bityutskiy wrote:
> > Hi Jacob,
> >
> > I never had time for this, but wanted to let you know the following.
> >
> > 1. We carry a copy of rather old libshell. The upstream repo of it is
> > this:
> >
> > git://git.altlinux.org/people/legion/packages/libshell.git
> >
> > We may want to look there and update sometimes.
>
> also I have a mirror at github:
>
> https://github.com/legionus/libshell
>
> > 2. The libshell contact is: Alexey Gladkov ⟨legion at altlinux.org⟩
> > May be it makes sense to CC Alexey in cases like this. Let me do just
> > that.
> >
> > Thanks!
> >
> >
> > On Tue, 2014-05-27 at 15:17 -0700, Jacob Keller wrote:
> >> The libshell ini_config_get and ini_config_is_set functions were
> broken
> >> in a subtle way, due to allowance of variables in a section which may
> >> not be defined. When we encountered the [section] tag that matched
> our
> >> given section, we enabled reading each line to check the variables.
> >> However, we never disabled the section once we found it, so it was
> >> possible for a variable defined in a forthcoming section to be
> returned,
> >> if we didn't define the variable in the expected section.
> >>
> >> This resulted in several subtle bugs regarding project configuration
> >> especially regarding the [default] section, and multiple projects. The
> >> fix for this, is simply to disable section processing upon section
> >> change. I thought about possibly just exiting, if we've found our
> >> section and it changes. However, that is a bit more complex logic, and
> >> this fix allows for having the same section twice, which might be a
> >> little confusing, but I think it's acceptable.
> >>
> >> Signed-off-by: Jacob Keller <jacob.e.keller at intel.com>
> >> ---
> >> helpers/libshell/shell-ini-config | 4 ++++
> >> 1 file changed, 4 insertions(+)
> >>
> >> diff --git a/helpers/libshell/shell-ini-config b/helpers/libshell/shell-ini-
> config
> >> index ba0bfbde777a..ffce51598876 100644
> >> --- a/helpers/libshell/shell-ini-config
> >> +++ b/helpers/libshell/shell-ini-config
> >> @@ -21,6 +21,8 @@ ini_config_get() {
> >>
> >> case "$str" in
> >> "["*"]")
> >> + # Reset section processing on section
> change
> >> + sect=
> >> [ "$str" != "[$section]" ] ||
> >> sect=1
> >> ;;
>
> Yes. It makes sense.
>
> >> @@ -52,6 +54,8 @@ ini_config_is_set()
> >>
> >> case "$str" in
> >> "["*"]")
> >> + # Reset section processing on section
> change
> >> + sect=
> >> [ "$str" != "[$section]" ] ||
> >> sect=1
> >> ;;
>
> This code is very old. ini_config_is_set has no more of this code.
>
Actually, ini_config_is_set is something I added to the code as our use case required being able to distinguish between a set but empty field or a non-set field.
> You can make a patch against recent version ?
>
> I don't know your usecase, but if you talk about the subsections, then
> you may be interested in shell-git-config (parser of git-like config
> files).
>
That might be better for our case, as the git-like configuration is a bit more powerful.
Thanks,
Jake
> --
> Rgrds, legion
>
>
> --
> Rgrds, legion
More information about the aiaiai
mailing list