• Bug#872956: [debian-policy] warn about danger of pipe in shell snippet

    From Bastien =?UTF-8?Q?ROUCARI=C3=88S?=@21:1/5 to All on Wed Aug 23 01:30:02 2017
    XPost: linux.debian.bugs.dist

    Package: debian-policy
    Version: 4.0.1.0
    Severity: normal

    set -e is not suffisant to detect error in pipe context

    cat nonexistant | sed s/some//g will hapilly return 0 and do not fail

    exec 3>&1; s=$(exec 4>&1 >&3; { cat nonexistant ; echo $? >&4; } | sed s/some//g ) && exit $s

    this could be simplified by using make function
    PIPESAFE=exec 3>&1; s=$$(exec 4>&1 >&3; { $(1) ; echo $$? >&4; } | $(2)) && exit $$s

    Could deserve a footnote on 4.6. Error trapping in makefiles




    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEEXQGHuUCiRbrXsPVqADoaLapBCF8FAlmcrdUACgkQADoaLapB CF8uOhAAnklm4aB8YFSHZn+46wAiMzQ+nRt3QkJGYnscx1JLIJgUIEO/2Dewj0Ah cuRxXBN4/9zgGFLzAWp7SgzbqASjSW8L1ZFjIYy10NqlVVetyx8jlHltvc432iC4 oTXSYQacbYePMOIxaw8lh8kIE+n5LquSUTo+/uHBm2fEd5VRK8dwSbsxs+6IEXs3 HgN4OTdhtSlk/bMWEVeKgZeIcFJtlCAT6Wo3pgXvEeug7Hi8ckaF+ANNAcnDz0Uk OG7YjqxO/pas3mXhYO9aL1kf1FgsbcoGAL9cTWZXO81nT64aOdqn/PeYn6g8OChj ab6yIEtuUsLP5nS4AqvjCgw6OttS80CWEnlwhkpeR3RzexsKmzc+FWP/h10e9Kum nMAE3rHERPIfXZblwnUIx8WxXOd5ePsMsN3b3y2MUKiAaOZeCEpt115gNKYW1NZC d81lxMB6C3doegMr7/xIZ4CPukj/rnRkq6qJB5IHsJDr8JGDAUcg1ii++BFvnU54 +QqqRdtpAWh3RGfQEjbVFK5toc2UICiOihpLGBpKKpASxg1Rdo13eD142/9elwEF t/0gGYni7HoZl05jESk4xEzXR8CNcGazIJnWjJTCv/KpBdqSCrnKhgLI7Ua/R5J4 X136i4JKBvnhT4Vatd5F+FszubnmLtiJIWK2Ek0WX4Fc0En7oJI=
    =UvCD
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jonathan Nieder@21:1/5 to All on Wed Aug 23 02:10:02 2017
    XPost: linux.debian.bugs.dist

    Hi,

    Bastien ROUCARIÈS wrote:

    set -e is not suffisant to detect error in pipe context

    cat nonexistant | sed s/some//g will hapilly return 0 and do not fail

    exec 3>&1; s=$(exec 4>&1 >&3; { cat nonexistant ; echo $? >&4; } | sed s/some//g ) && exit $s

    this could be simplified by using make function
    PIPESAFE=exec 3>&1; s=$$(exec 4>&1 >&3; { $(1) ; echo $$? >&4; } | $(2)) && exit $$s

    Could deserve a footnote on 4.6. Error trapping in makefiles

    I don't think this belongs in policy. Maybe devref?

    By the way, if you're using bash (https://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html), you can use "set -o pipefail" to handle this kind of case.

    Thanks,
    Jonathan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)