#!/bin/sh # Check that grep doesn't mishandle long matching lines. . "${srcdir=.}/init.sh"; path_prepend_ ../src expensive_ # Create a one-line file containing slightly more than 2 GiB. echo x | dd bs=1024k seek=2048 >2G-plus-2 || framework_failure_ skip_diagnostic= # These two patterns catch different kinds of # failures due to internal integer overflows. # However, the second one, '^.*x\(\)\1', provokes # so much memory consumption via regexec.c that it renders # some systems unusable. for pattern in '^.*'; do diagnostic=$(LC_ALL=C grep -a "$pattern" 2G-plus-2 2>&1 >/dev/null) status=$? case $status,$diagnostic in 0,*) ;; 2,*': line too long for re_search') skip_diagnostic='regular expression library cannot handle the test' ;; 137,''|2,*': memory exhausted') # The 137/no-diagnostic arises when the kernel OOM-kills grep. skip_diagnostic='not enough main memory to run the test' ;; *) fail=1 ;; esac done case $fail,$skip_diagnostic in 0,?*) skip_ "$skip_diagnostic" ;; esac Exit $fail