From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id wG10CGTW/WXd2hEAWB0awg (envelope-from ) for ; Fri, 22 Mar 2024 15:05:08 -0400 Received: by simark.ca (Postfix, from userid 112) id 1FC871E0C0; Fri, 22 Mar 2024 15:05:08 -0400 (EDT) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 0B46F1E08C for ; Fri, 22 Mar 2024 15:05:06 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 80F1E385841C for ; Fri, 22 Mar 2024 19:05:05 +0000 (GMT) Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) by sourceware.org (Postfix) with ESMTPS id E6A643858422 for ; Fri, 22 Mar 2024 19:04:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E6A643858422 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E6A643858422 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711134278; cv=none; b=Jrt+LNRxQZGusBEMKCfXniyfRqu6mHJ5VW/Eq3IU42ua/G5xu1WT6vg+ihP5/27klMwJGtMqujzz6hmj1YwF6WNmuuBRKcEw0zEmDCk53N0MUy431/EDHVUBKhi+W3NYalIbTeyioE498bXBKJYRGudDuIx6/Ez5si6SGwemKyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711134278; c=relaxed/simple; bh=ytbfJGR5r40OSMNy8UnyM04bt2qd52YxwGCH/f6yq/w=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=u4857z0y3rf6YH1JC1jE4Kr3rByUSytqrBKeERnny9XhOzMYxcB4OWEHG8fRFeKfZDNsVZxZhFvOMrKEFx8PyZAFQAxfYRRcbC1wHEXaFH05Z56aZCZYzTLXp9aq+QqDNKgt7kSmvVhmgmsgPeXO6xJ0296SPtZExpqQfrdqTEY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-33ed4d8e9edso1509586f8f.2 for ; Fri, 22 Mar 2024 12:04:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711134275; x=1711739075; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vGh6S1XN91/wrSeItP08uLPVAmT1VmJJfBaTBFAzR44=; b=U4h0wBaK6ZragjcmvzYjQH/S4egEj5bpr96OJRXb18m32Xs7VczWqbvAY/0t4xeaDJ +sLWUpvGWk0hnlO/wFcpO4M3JwHqBMMaI+ILEbpFztbO5u/raul8+RvDI6T6ceQGog8t LN5+NQ/ekcL8DDWtpVLsAZMxvraTkP5+OTy6ElTLdXe4Hv5Ses6wGqWkDVCB6DRHAPrR ApNOMXjAN6oV4r2MZ34ejSMKcfHNaIOjd4idO0LBLnRGvpXeTZL74hiwGzf0MKFZcMnz /rlk26/Tx6+AvsZP5iK9oZE2cSSnI38B1+PivB3c37lJGj5BWuc8aJW+TLbuRd4MdS8d tNcg== X-Gm-Message-State: AOJu0YxczVX3Ng5txA5PyNAItHZMFjN0DnxFulF/5dEj0u+f2pOG47jd bCuqZcDTnpRHC/l7z26oo4bHiRM3qJoXbygMgpp0FLYmWWbpZo1Z+tBTl461 X-Google-Smtp-Source: AGHT+IF57hnqyOh+gLQzyHbkJmUrzRdITN2mIsq8VWhmXXB+9OGC7IBrbV4EMSEsLZFhE4MXve/upw== X-Received: by 2002:adf:f28a:0:b0:33e:77b5:746d with SMTP id k10-20020adff28a000000b0033e77b5746dmr204443wro.18.1711134275509; Fri, 22 Mar 2024 12:04:35 -0700 (PDT) Received: from localhost ([2001:8a0:f918:ab00:3ba9:feec:1922:9a68]) by smtp.gmail.com with UTF8SMTPSA id t15-20020a5d690f000000b0033e95bf4796sm2671921wru.27.2024.03.22.12.04.34 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 22 Mar 2024 12:04:35 -0700 (PDT) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 3/4] windows-nat: Remove SO_NAME_MAX_PATH_SIZE limit Date: Fri, 22 Mar 2024 19:04:23 +0000 Message-ID: <20240322190424.1231540-4-pedro@palves.net> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240322190424.1231540-1-pedro@palves.net> References: <20240322190424.1231540-1-pedro@palves.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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 There is no need to limit shared library path sizes to SO_NAME_MAX_PATH_SIZE nowadays. windows_solib::name and windows_solib::original_name are std::strings nowadays, and so are solib::so_name and solib::so_original_name in the core solib code. This commit reworks the code to remove that limit. This also fixes a leak where we were not releasing 'rname' in the realpath branch if the 'rname' string was larger than SO_NAME_MAX_PATH_SIZE. Note: I tested the cygwin_conv_path with a manual hack to force that path, and then stepping through the code. You only get to that path if Windows doesn't report an absolute path for ntdll.dll, and on my machine (running Windows 10), it always does. Change-Id: I79e9862d5a7646eebfef7ab5b05b96318a7ca0c5 --- gdb/windows-nat.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index a01011248c1..278bfb0e1f1 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -874,22 +874,32 @@ windows_make_so (const char *name, LPVOID load_addr) } if (buf[0]) { - char cname[SO_NAME_MAX_PATH_SIZE]; - cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, cname, - SO_NAME_MAX_PATH_SIZE); - so->name = cname; + bool ok = false; + + /* Check how big the output buffer has to be. */ + ssize_t size = cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, nullptr, 0); + if (size > 0) + { + /* SIZE includes the null terminator. */ + so->name.resize (size - 1); + if (cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, so->name.data (), + size) == 0) + ok = true; + } + if (!ok) + so->name = so->original_name; } else { char *rname = realpath (name, NULL); - if (rname && strlen (rname) < SO_NAME_MAX_PATH_SIZE) + if (rname != nullptr) { so->name = rname; free (rname); } else { - warning (_("dll path for \"%s\" too long or inaccessible"), name); + warning (_("dll path for \"%s\" inaccessible"), name); so->name = so->original_name; } } -- 2.43.2