하지만퍼즈 테스트나는 이것이 가능하다는 것을 다음과 같이 정의함으로써 발견했습니다.
var=$'\365\\'
, 다음 두 명령을 실행합니다(마지막 개행 문자 앞의 모든 항목을 제거하려면).CPU를 100% 사용하여 무기한 중단됨Bash 4.2.25(1)-릴리스(x86_64-pc-linux-gnu):
[ -n "${var##*$'\n'}" ]
[[ -n "${var##*$'\n'}" ]]
런어웨이 프로세스는 ( -또는 ) 또는 를 bash
사용하여 중단할 수 없지만 종료하려면 를 사용해야 합니다 .SIGINT
CtrlCkill -SIGINT $pid
SIGTERM
SIGKILL
나는 다음을 사용하여 값을 확인하려고 시도했습니다.
uniname -bcp <<<"$var"
그러나 이것도 공중에 떠 있습니다. uniname
그러나 죽일 수는 있습니다 SIGINT
.
또한 몇 가지 다른 기본 명령도 확인했는데 모두 잘 작동합니다.
echo "$var"
printf '%q\n' "$var"
touch -- "$var"
rm -- "$var"
여기서 무슨 일이 일어나고 있는 걸까요? 이것이 다른 사람들에 의해 복제될 수 있습니까? 이것이 정의된 동작인가요?
답변1
bash-4.2
이는 잘못된 UTF-8 문자가 포함된 문자열의 글로빙과 관련된 UTF-8 로케일의 패치 29에 있는 버그입니다 \365\\
.
다음 명령을 사용하여 재현할 수도 있습니다.
: *$'\365x'
이 문제는 다음에서 수정되었습니다.패치 30, 패치 노트 및메일링 리스트 토론더 알아보기.