From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55AE6C433E0 for ; Tue, 30 Jun 2020 03:49:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2C4A6206CB for ; Tue, 30 Jun 2020 03:49:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593488959; bh=lpsIvelkjihOnmpTVyd61Q+ncJXr0zdE2nXYr+Gy9AU=; h=References:In-Reply-To:From:Date:Subject:To:Cc:List-ID:From; b=myg7IVTo9Sszk1GxupfzKuAB/gEOffD7FzfbsRaBFeP1ngYEYX9hI7IaKWInFLwwj nU+GRlN9KukSFAczfTx5Yv401CtF61L/vlo5KGt0MbdB7fgM2awCZDyz4IIEgksMyi rid9z8LXwbBR7jY/C8MyHiLoDWPPMjBvv/B7M3mc= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729272AbgF3DtS (ORCPT ); Mon, 29 Jun 2020 23:49:18 -0400 Received: from conssluserg-01.nifty.com ([210.131.2.80]:30217 "EHLO conssluserg-01.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726686AbgF3DtR (ORCPT ); Mon, 29 Jun 2020 23:49:17 -0400 Received: from mail-ua1-f46.google.com (mail-ua1-f46.google.com [209.85.222.46]) (authenticated) by conssluserg-01.nifty.com with ESMTP id 05U3moGX023631; Tue, 30 Jun 2020 12:48:50 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com 05U3moGX023631 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1593488931; bh=L5bF0/i/eZ19PQIKyGrIclMJgHgazVnFvKT56waBheY=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=fQtNDef/4gbBj4sH8OyYiGSHcVVTVW/todIP66Irykh3b2OXoTHHL+smNd+G7YAIp w8Kmok1bdmEEhjYCX4VVFCmAucuiCHvK3CdIadCQkSAmjg3thGW+DoJ5sW1ew1vW5o W7fWOJxX+gPdh4VxrBR/foabnqwz3RNJ5tTkOvWh3E3tGFyP2ZgLuWcgiPF1NcVXj/ wioVVkcq9cdcYC2/ee/0IIQtsgIyzFnjzd1WcxZk2+QwpOYvSt/kP8WtZRkclUs6+v n/9xPwxanT68SrTcTPMrz3zk9xXxi+ijhtuJV+JYphDG78wknkh3wsXa9edDgbDGmK TySXLjDoPcQOg== X-Nifty-SrcIP: [209.85.222.46] Received: by mail-ua1-f46.google.com with SMTP id c7so4563686uap.0; Mon, 29 Jun 2020 20:48:50 -0700 (PDT) X-Gm-Message-State: AOAM530cSt/CIf0dnVqrZv9sWq1eDckTN4MYvUdUxX7BjYl8hOP9htwR Iw4UInp6nfQahP5dXkg3QcpzWb4ZA/NhaydYIWk= X-Google-Smtp-Source: ABdhPJxafqb6wU0aahd+d4klMRfJurxLwUz2ixEpZl5qdTwMQ4C9xAcUyuO1leT0C0/nEqECxK2CI9Ti4GX8Ieh/mhc= X-Received: by 2002:a9f:2204:: with SMTP id 4mr13372786uad.40.1593488929471; Mon, 29 Jun 2020 20:48:49 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Masahiro Yamada Date: Tue, 30 Jun 2020 12:48:13 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 4/5] kconfig: qconf: make debug links work again To: Mauro Carvalho Chehab Cc: Maxim Levitsky , Linux Kbuild mailing list , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 29, 2020 at 6:35 PM Mauro Carvalho Chehab wrote: > > The Qt5 conversion broke support for debug info links. > > Restore the behaviour added by changeset > ab45d190fd4a ("kconfig: create links in info window"). > > The original approach were to pass a pointer for a data struct "were" -> "was" ? > via an . That doesn't sound a good idea, as, if something > gets wrong, the app could crash. So, instead, pass the name of > the symbol, and validate such symbol at the hyperlink handling > logic. > > Link: https://lore.kernel.org/lkml/20200628125421.12458086@coco.lan/ > Reported-by: Maxim Levitsky > Signed-off-by: Mauro Carvalho Chehab This patch does not cause segmentation fault any more. Thanks. > --- > scripts/kconfig/qconf.cc | 75 +++++++++++++++++++++++++++++++++++++--- > scripts/kconfig/qconf.h | 1 + > 2 files changed, 71 insertions(+), 5 deletions(-) > > diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc > index 85782da3e464..49f0688fceb8 100644 > --- a/scripts/kconfig/qconf.cc > +++ b/scripts/kconfig/qconf.cc > @@ -7,6 +7,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -1012,7 +1013,7 @@ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) > : Parent(parent), sym(0), _menu(0) > { > setObjectName(name); > - > + setOpenLinks(false); > > if (!objectName().isEmpty()) { > configSettings->beginGroup(objectName()); > @@ -1085,7 +1086,7 @@ void ConfigInfoView::menuInfo(void) > if (sym->name) { > head += " ("; > if (showDebug()) > - head += QString().sprintf("", sym); > + head += QString().sprintf("", sym->name); > head += print_filter(sym->name); > if (showDebug()) > head += ""; > @@ -1094,7 +1095,7 @@ void ConfigInfoView::menuInfo(void) > } else if (sym->name) { > head += ""; > if (showDebug()) > - head += QString().sprintf("", sym); > + head += QString().sprintf("", sym->name); > head += print_filter(sym->name); > if (showDebug()) > head += ""; > @@ -1145,7 +1146,7 @@ QString ConfigInfoView::debug_info(struct symbol *sym) > switch (prop->type) { > case P_PROMPT: > case P_MENU: > - debug += QString().sprintf("prompt: ", prop->menu); > + debug += QString().sprintf("prompt: ", sym->name); > debug += print_filter(prop->text); > debug += "
"; > break; > @@ -1217,13 +1218,74 @@ void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char > QString str2 = print_filter(str); > > if (sym && sym->name && !(sym->flags & SYMBOL_CONST)) { > - *text += QString().sprintf("", sym); > + *text += QString().sprintf("", sym->name); > *text += str2; > *text += ""; > } else > *text += str2; > } > > +void ConfigInfoView::clicked(const QUrl &url) > +{ > + QByteArray str = url.toEncoded(); > + const std::size_t count = str.size(); > + char *data = new char[count + 1]; > + struct symbol **result; > + struct menu *m = NULL; > + char type; > + > + if (count < 1) { > + qInfo() << "Clicked link is empty"; > + delete data; > + return; > + } > + > + memcpy(data, str.constData(), count); > + data[count] = '\0'; > + type = data[0]; > + > + /* Seek for exact match */ > + data[0] = '^'; > + strcat(data, "$"); > + result = sym_re_search(data); > + if (!result) { > + qInfo() << "Clicked symbol is invalid:" << data; > + delete data; > + return; > + } > + > + sym = *result; > + if (type == 's') { > + symbolInfo(); > + emit showDebugChanged(true); > + free(result); > + delete data; > + return; > + } > + > + /* URL is a menu */ > + for (struct property *prop = sym->prop; prop; prop = prop->next) { > + if (prop->type != P_PROMPT && prop->type != P_MENU) > + continue; > + m = prop->menu; > + break; > + } > + > + if (!m) { > + qInfo() << "Clicked menu is invalid:" << data; > + free(result); > + delete data; > + return; > + } > + > + _menu = m; > + menuInfo(); > + > + emit showDebugChanged(true); > + free(result); > + delete data; > +} > + > QMenu* ConfigInfoView::createStandardContextMenu(const QPoint & pos) > { > QMenu* popup = Parent::createStandardContextMenu(pos); > @@ -1497,6 +1559,9 @@ ConfigMainWindow::ConfigMainWindow(void) > helpMenu->addAction(showIntroAction); > helpMenu->addAction(showAboutAction); > > + connect (helpText, SIGNAL (anchorClicked (const QUrl &)), > + helpText, SLOT (clicked (const QUrl &)) ); > + > connect(configList, SIGNAL(menuChanged(struct menu *)), > helpText, SLOT(setInfo(struct menu *))); > connect(configList, SIGNAL(menuSelected(struct menu *)), > diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h > index d913a02967ae..a193137f2314 100644 > --- a/scripts/kconfig/qconf.h > +++ b/scripts/kconfig/qconf.h > @@ -250,6 +250,7 @@ public slots: > void setInfo(struct menu *menu); > void saveSettings(void); > void setShowDebug(bool); > + void clicked (const QUrl &url); > > signals: > void showDebugChanged(bool); > -- > 2.26.2 > -- Best Regards Masahiro Yamada