From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 6XZ2OXM1l2rP1hsAWB0awg (envelope-from ) for ; Tue, 01 Sep 2026 16:28:35 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=hfRLGK0Z; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=Uo0fs5gG; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=mXs1SavB; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=24tCYa3E; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id E6E821E166; Tue, 01 Sep 2026 16:28:35 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id DF0B41E033 for ; Tue, 01 Sep 2026 16:28:34 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3E9A84BA2E35 for ; Tue, 1 Sep 2026 20:28:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3E9A84BA2E35 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=hfRLGK0Z; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=Uo0fs5gG; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=mXs1SavB; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=24tCYa3E Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id D9E6A4BA2E35 for ; Tue, 1 Sep 2026 20:27:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D9E6A4BA2E35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D9E6A4BA2E35 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788294473; cv=none; b=W7RvcdEqMAqkQo50bIm/gvDDDxp3OlwKAwBCLLcd9TpgU3wR1S5hZP39hkAc5Ilb+EqxfhyVTKNTySccov7tHapm7n6N922I4kkuR8QpmIms+R+4/FNIOZlficjNwYgUgD6PA4ye47ayBd8VqI5mn6rZG1xSTkwdP+xuw9KK9w8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788294473; c=relaxed/simple; bh=k6roZ6ykFgkE3SBq9u7dM9NcGT6GB91Xy/l+8r0IJTg=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=x+0jTMgpi8/EXHyf0go/1Vqc+7ydZ41C+0SoLmoqGN/HyIkkj1/B2wi/in5YYe3PhgzDcmfxnAueWwhAOnNWzLtFC5CEgc0t92XzUJ+Z6yhwZhDMfTOODoCSSuqLyqWKX2F03YmE1biNb2Hlvx2P9J71uoqyrds5vopW20r1/EQ= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=hfRLGK0Z; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=Uo0fs5gG; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=mXs1SavB; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=24tCYa3E DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D9E6A4BA2E35 Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 2FFF3221E3 for ; Tue, 1 Sep 2026 20:27:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788294467; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4ZhmdrIOHVV6zFuGqvTUXnbBOkvWS4mfo5CCWuEpqU0=; b=hfRLGK0ZL10CDySemaQ7bOEkv/t/jRexK1CA6jGoYYk8+5N4fhrhD8ag3dCn0xR7NwSiZQ hxwnHzi+/rTZOvElQusimT/H6iW0l5QdV3DABb1eeroWNUJWRiDnHqYfruMJGbxuAPemud cCoGL0Cd82qz0w+YfRgvRQ+F/D2x77A= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788294467; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4ZhmdrIOHVV6zFuGqvTUXnbBOkvWS4mfo5CCWuEpqU0=; b=Uo0fs5gG2po51UZWrOFDFQU3BRg3JjYl3UX8EXz/G8yMJCleiIZho/Diyj0RPVCpdArk9o Vp0CYV2NEUDfnIAg== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788294463; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4ZhmdrIOHVV6zFuGqvTUXnbBOkvWS4mfo5CCWuEpqU0=; b=mXs1SavB2eR4+cxUCTktZerEIQKvukq5YckdBXCNJ9ZJsCWG2e9eh7gIUyk4AxlYkNQc25 POHewxJIF/ERehTEwUw4X6LDnBFjbsYR9efRSmw640WX2YOwMouurz2vpvfTbAAOJhxirM mt+IrmCcg2T2OoxfoSa30ToG/B/EiZ4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788294463; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4ZhmdrIOHVV6zFuGqvTUXnbBOkvWS4mfo5CCWuEpqU0=; b=24tCYa3ENlKBUFkgzB/OJtsP+/2EjQfB3W3GzRy+Lm4lhmiOne3F91kVrcLHzvgr4NNyK2 vMGfeprJMr57wXDQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id F1640136B2 for ; Tue, 1 Sep 2026 20:27:42 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id uC6zOD41l2qzUgAAD6G6ig (envelope-from ) for ; Tue, 01 Sep 2026 20:27:42 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 1/2] [pre-commit] Reject symlinks in check-file-mode Date: Tue, 1 Sep 2026 22:27:41 +0200 Message-ID: <20260901202742.320498-2-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260901202742.320498-1-tdevries@suse.de> References: <20260901202742.320498-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-0.993]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org In a recent commit I introduced two symlinks. After reading a bit more about it, I realized that this can be problematic on platforms without proper support for it [1]. Which is probably also the reason why there aren't any symlinks in the repo other than those two. Eliminate the symlinks, and extend check-file-mode to reject symlinks. While we're at it, move the existing check into a function, and improve comments and error message a bit. [1] https://gitforwindows.org/symbolic-links.html --- .pre-commit-config.yaml | 4 ++ gdb/contrib/check-file-mode.sh | 77 +++++++++++++++++++++++----------- gdbserver/.shellcheckrc | 4 +- gdbsupport/.shellcheckrc | 4 +- 4 files changed, 63 insertions(+), 26 deletions(-) mode change 120000 => 100644 gdbserver/.shellcheckrc mode change 120000 => 100644 gdbsupport/.shellcheckrc diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0b4285e6c82..34d2cba40b9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -151,6 +151,10 @@ repos: language: unsupported_script entry: gdb/contrib/check-file-mode.sh files: *gdb_files + # With the default types == [file], because types and types_or are + # and-ed, no symlinks will be selected, so we use types == [] instead. + types: [] + types_or: [file, symlink] - id: &id5 shellcheck name: *id5 files: '^(gdb|gdbsupport|gdbserver)/' diff --git a/gdb/contrib/check-file-mode.sh b/gdb/contrib/check-file-mode.sh index 5a9b0e89fbe..e9cfaf02ce4 100755 --- a/gdb/contrib/check-file-mode.sh +++ b/gdb/contrib/check-file-mode.sh @@ -17,30 +17,59 @@ set -e set -o pipefail -no_exec_files=() -for f in "$@"; do - case $f in - */*.py \ - | */*.sh \ - | */configure \ - | gdb/gstack-1.in \ - | gdb/gcore-1.in \ - | gdb/po/gdbtext \ - | gdb/make-init-c \ - | gdb/testsuite/lib/notty-wrap ) - continue - ;; - *) - no_exec_files=("${no_exec_files[@]}" "$f") - ;; - esac -done +# Flag files that are executable, but not meant to be executable. +check_exec () +{ + no_exec_files=() + for f in "$@"; do + case $f in + */*.py \ + | */*.sh ) + # Shell script or python. + continue + ;; + gdb/po/gdbtext \ + | gdb/make-init-c \ + | gdb/testsuite/lib/notty-wrap ) + # Shell script without .sh extension. + continue + ;; + */configure \ + | gdb/gstack-1.in \ + | gdb/gcore-1.in ) + # Used to generate shell script. + continue + ;; + *) + no_exec_files=("${no_exec_files[@]}" "$f") + ;; + esac + done -if [ ${#no_exec_files[@]} -eq 0 ]; then - exit 0 -fi + if [ ${#no_exec_files[@]} -eq 0 ]; then + return + fi -# Flag files that are executable, but not meant to be executable. + if ! git ls-files --stage -- "${no_exec_files[@]}" \ + | (! grep '^100755 '); then + echo "Found executable mode (100755) on file without .sh or .py" + echo "Please fix or add to exception list in $0" + exit 1 + fi +} + +# Flag symlinks. Symlinks are support by git, but can be problematic on +# platforms without proper support for it [1]. +# [1] https://gitforwindows.org/symbolic-links.html +check_symlinks () +{ + if ! git ls-files --stage -- "$@" \ + | (! grep '^120000 '); then + echo "Found symlink mode (120000)" + echo "Please replace by copy" + exit 1 + fi +} -git ls-files --stage -- "${no_exec_files[@]}" \ - | (! grep '^100755 ') +check_exec "$@" +check_symlinks "$@" diff --git a/gdbserver/.shellcheckrc b/gdbserver/.shellcheckrc deleted file mode 120000 index 2a49a004d21..00000000000 --- a/gdbserver/.shellcheckrc +++ /dev/null @@ -1 +0,0 @@ -../gdb/.shellcheckrc \ No newline at end of file diff --git a/gdbserver/.shellcheckrc b/gdbserver/.shellcheckrc new file mode 100644 index 00000000000..91b66edaf7a --- /dev/null +++ b/gdbserver/.shellcheckrc @@ -0,0 +1,3 @@ +# SC2002 was disabled by default in 0.11.0. Turn it on for +# compatibility with 0.10.0. +enable=useless-use-of-cat diff --git a/gdbsupport/.shellcheckrc b/gdbsupport/.shellcheckrc deleted file mode 120000 index 2a49a004d21..00000000000 --- a/gdbsupport/.shellcheckrc +++ /dev/null @@ -1 +0,0 @@ -../gdb/.shellcheckrc \ No newline at end of file diff --git a/gdbsupport/.shellcheckrc b/gdbsupport/.shellcheckrc new file mode 100644 index 00000000000..91b66edaf7a --- /dev/null +++ b/gdbsupport/.shellcheckrc @@ -0,0 +1,3 @@ +# SC2002 was disabled by default in 0.11.0. Turn it on for +# compatibility with 0.10.0. +enable=useless-use-of-cat -- 2.51.0