Re: [PATCH] Harden make-cairo-test-constructors.sh

Andrea Canciani <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <CAN_5=BBqWe2XRWY00EB3PiB6jaePumJA1ihSK18VS77zYcNNmQ@mail.gmail.com>
On Wed, Mar 11, 2015 at 11:13 PM, Bryce Harrington <[email protected]>
wrote:

> On Wed, Mar 11, 2015 at 03:29:26PM +0100, Andrea Canciani wrote:
> > The make-cairo-test-constructors.sh script executes several commands
> > without checking their success. This can lead to undetected errors,
> > like those fixed in 86fad78fcd2bf987249890aea4eabcce02a58f45.
> >
> > Setting the '-e' flag and writing to a temporary file ensures that the
> > 'cairo-test-constructors.c' target completes succesfully only if no
> > error occurred.
> > ---
> >  test/Makefile.am                     | 3 ++-
> >  test/make-cairo-test-constructors.sh | 2 ++
> >  2 files changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/test/Makefile.am b/test/Makefile.am
> > index 950629b..a56e7ff 100644
> > --- a/test/Makefile.am
> > +++ b/test/Makefile.am
> > @@ -81,7 +81,8 @@ noinst_SCRIPTS = check-refs.sh
> >  TESTS += cairo-test-suite$(EXEEXT)
> >
> >  cairo-test-constructors.c: Makefile $(test_sources)
> make-cairo-test-constructors.sh
> > -     (cd $(srcdir) && sh ./make-cairo-test-constructors.sh
> $(test_sources)) > $@
> > +     (cd $(srcdir) && sh ./make-cairo-test-constructors.sh
> $(test_sources)) > [email protected]
> > +     mv [email protected] $@
>
> This will properly avoid overwriting $@ if the script fails, and make
> will bail at that point.  Does [email protected] get created in that case?  If so,
> does anything clean that stray file up?  Would mktemp be a cleaner
> solution maybe?
>

The [email protected] file is generated both if the make-cairo-test-constructors.sh
script succeeds and if it fails; in the first case it is renamed to $@, but
upon error it stays and it is not cleaned up.
AFAICT mktemp would not address the issue, as it would only generate a
unique filename, but it would not ensure that the file is eventually
removed.

>
>
> >  cairo_test_suite_SOURCES =           \
> >       $(cairo_test_suite_sources)     \
> > diff --git a/test/make-cairo-test-constructors.sh
> b/test/make-cairo-test-constructors.sh
> > index cb1391e..9b78eba 100644
> > --- a/test/make-cairo-test-constructors.sh
> > +++ b/test/make-cairo-test-constructors.sh
> > @@ -1,5 +1,7 @@
> >  #! /bin/sh
> >
> > +set -e
> > +
>
> Can you verify that your sed exits with non-zero exit code in the
> 86fad78f case?
>

Yes, I tested that.


>
> >  if test $# -eq 0; then
> >      echo "$0: no input files." >&2
> >      exit 0
>
> Shouldn't this exit 1 since it's another error condition?
>

Yes, I think that's much better.

I just sent in a revised patch that should address your comments.

Andrea


>
> > --
> > 1.9.5 (Apple Git-50.3)
> >
> > --
> > cairo mailing list
> > [email protected]
> > http://lists.cairographics.org/mailman/listinfo/cairo
>

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.