| 1 | #! /bin/sh
 | 
|---|
| 2 | # Grep 2.21 would report "grep: internal PCRE error: -27"
 | 
|---|
| 3 | #
 | 
|---|
| 4 | # Copyright 2015-2021 Free Software Foundation, Inc.
 | 
|---|
| 5 | #
 | 
|---|
| 6 | # Copying and distribution of this file, with or without modification,
 | 
|---|
| 7 | # are permitted in any medium without royalty provided the copyright
 | 
|---|
| 8 | # notice and this notice are preserved.
 | 
|---|
| 9 | 
 | 
|---|
| 10 | . "${srcdir=.}/init.sh"; path_prepend_ ../src
 | 
|---|
| 11 | require_pcre_
 | 
|---|
| 12 | 
 | 
|---|
| 13 | for p in 'base64 -d' 'base64 -D' 'openssl base64 -d' \
 | 
|---|
| 14 |       "perl -MMIME::Base64 -0777ne 'print decode_base64(\$_)'" FAIL; do
 | 
|---|
| 15 |     test "$p" = FAIL && skip_ "your system lacks a base64 decoder"
 | 
|---|
| 16 |     x=$(echo eA==| ( eval "$p" ) 2>/dev/null) && test "X$x" = Xx &&
 | 
|---|
| 17 |       {
 | 
|---|
| 18 |         eval "b64_decode() { $p; }"
 | 
|---|
| 19 |         break
 | 
|---|
| 20 |       }
 | 
|---|
| 21 | done
 | 
|---|
| 22 | 
 | 
|---|
| 23 | foo=$( (echo foo | gzip | gzip -d) 2>/dev/null) && test "X$foo" = Xfoo \
 | 
|---|
| 24 |   || skip_ "your system lacks the gzip program"
 | 
|---|
| 25 | 
 | 
|---|
| 26 | fail=0
 | 
|---|
| 27 | 
 | 
|---|
| 28 | b64_decode >pcrejit.txt.gz <<'EOF' || framework_failure_
 | 
|---|
| 29 | H4sIAAAAAAACA+2bUU4DMQxE/7mMz5T7XwKE+IBKVLue58yk0B9EtX6xJxN7t4VaH69a6+tHrW+/
 | 
|---|
| 30 | r4e3n75KARWShSOFTtiumE3FPVyo79ATIJ0Ry0No/yXe99UIUqTGKKUzYHFJHJoaCONQDCnDSCDS
 | 
|---|
| 31 | IPAvGCVeXNsZ7lpbWFfdaZtgPos5LeK2C1TBKzD09V3HFlCOsbFT/hNbz4HzJaRjnjdam9FXw/o6
 | 
|---|
| 32 | VyPozhMmiaRYAMeNSJR1iMjBEFLMtsH7lptartfxkzPQgFVofwRlxKsMYn2KNDnU9fsOQCkRIYVT
 | 
|---|
| 33 | G80ZRqBpSQjRYPX7s9gvtqknyNE2f8V09sxHM7YPmMMJgrmVna2AT717n5fUAIDkiBCqFgWUUgKD
 | 
|---|
| 34 | 8jOc0Rgj5JS6vZnQI14wkaTDAkD266p/iVHs8gjCrMFARVM0iEVgFAa9YRAQT4tkgsmloTJLmyCm
 | 
|---|
| 35 | uSHRnTkzIdZMmZ5kYX/iJFtTwu9cFvr3aDWcUx4pUW/cVQwPoQSlwguNd4M0vTpAauKodmLFXv1P
 | 
|---|
| 36 | dkcKkYUglER2Q4L4gnmOiNGzSBATwGQgwihs5/QffIhyfg4hJvM2r4Rp6L+1ibCCd4jYZ6jCiBlc
 | 
|---|
| 37 | 2+y4fl4yTGIwcWXNAUEeXmu8iCMV96DNTnmRNICDk2N5qaXGbsF91OX/0hlcYTjrMfy02p9Xv70D
 | 
|---|
| 38 | mv3RZCFOAAA=
 | 
|---|
| 39 | EOF
 | 
|---|
| 40 | 
 | 
|---|
| 41 | gzip -d pcrejit.txt || framework_failure_
 | 
|---|
| 42 | 
 | 
|---|
| 43 | LC_ALL=C grep -P -n '^([/](?!/)|[^/])*~/.*' pcrejit.txt
 | 
|---|
| 44 | if test $? != 1; then
 | 
|---|
| 45 |     # The above often makes grep attempt to use an inordinate amount
 | 
|---|
| 46 |     # of stack space.  If grep fails with $? != 1, try again, but this
 | 
|---|
| 47 |     # time with no soft limit:
 | 
|---|
| 48 | 
 | 
|---|
| 49 |     # Use ulimit to remove that limit, if possible.
 | 
|---|
| 50 |     # If ulimit is not usable, just skip this test.
 | 
|---|
| 51 |     (ulimit -s unlimited) || skip_ this shell lacks ulimit support
 | 
|---|
| 52 | 
 | 
|---|
| 53 |     # Rerun that same test, but now with no limit on stack size:
 | 
|---|
| 54 |     (ulimit -s unlimited;
 | 
|---|
| 55 |      returns_ 1 env LC_ALL=C grep -P -n '^([/](?!/)|[^/])*~/.*' pcrejit.txt 2> err) \
 | 
|---|
| 56 |        || fail=1
 | 
|---|
| 57 | 
 | 
|---|
| 58 |     # If that failed due to stack overflow, don't cry foul.
 | 
|---|
| 59 |     overflow_pat="stack overflow|exceeded PCRE's recursion limit"
 | 
|---|
| 60 |     test $fail = 1 && { grep -Eq "$overflow_pat" err && fail=0 || cat err; }
 | 
|---|
| 61 | fi
 | 
|---|
| 62 | 
 | 
|---|
| 63 | Exit $fail
 | 
|---|