threads / patch / 55265

patchfix: added new BANNED_EXPL macro for better error messages, new parameter

Subject: [PATCH] fix: added new BANNED_EXPL macro for better error messages, new parameter

## tl;dr

5 messages between Mar 6, 2021 and Mar 8, 2021. Diffs are folded; open one to read it.

replies: 4people: 4as markdown or json

HG King via GitGitGadget· Mar 6, 2021, 00:51 UTC · lore
From: HGimself <hgmaxwellking@gmail.com>
Signed-off-by: HGimself <hgmaxwellking@gmail.com>
---
    fix: added new BANNED_EXPL macro for better error messages, has a par…
    
    
    Extend Banned Function Error Messages
    =====================================
    
    AS A NEWER USER, I WANT TO BE ABLE TO UNDERSTAND WHY CERTAIN FUNCTIONS
    ARE BANNED AS WELL AS KNOW WHAT FUNCTIONS TO USE INSTEAD.
    
    
    Changes
    =======
    
     * Added new macro named BANNED_EXPL(func, expl) which added the expl
       onto the error message
     * Used strcpy as an example
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-896%2FHGHimself%2Ffix%2Fadd-new-ban-macro-with-explanation-parameter-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-896/HGHimself/fix/add-new-ban-macro-with-explanation-parameter-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/896
 banned.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Show changes to banned.h +2 −1
diff --git a/banned.h b/banned.h
index 7ab4f2e49219..a19f0afeda79 100644
--- a/banned.h
+++ b/banned.h
@@ -9,9 +9,10 @@
  */
 
 #define BANNED(func) sorry_##func##_is_a_banned_function
+#define BANNED_EXPL(func, expl) sorry_##func##_is_a_banned_funcion_because_##expl##.
 
 #undef strcpy
-#define strcpy(x,y) BANNED(strcpy)
+#define strcpy(x,y) BANNED_EXPL(strcpy, buffer_overflow_risk)
 #undef strcat
 #define strcat(x,y) BANNED(strcat)
 #undef strncpy

base-commit: be7935ed8bff19f481b033d0d242c5d5f239ed50
-- 
gitgitgadget
Junio C Hamano· Mar 7, 2021, 20:34 UTC · re: HG King via GitGitGadget · lore

Re: [PATCH] fix: added new BANNED_EXPL macro for better error messages, new parameter

"HG King via GitGitGadget" <gitgitgadget@gmail.com> writes:
>  #undef strcpy
> -#define strcpy(x,y) BANNED(strcpy)
> +#define strcpy(x,y) BANNED_EXPL(strcpy, buffer_overflow_risk)

That does not help programmers that much (the above does not say what to use instead, for example), and the mechanism inherently does not give you sufficient space to give helpful guidance.

Adding a comment around each of these definition may be OK. Upon seeing foo_is_a_banned_function, somebody new to the codebase would look for where it is banned, and find the above, so that is a good place to give guidance.

Taylor Blau· Mar 8, 2021, 18:05 UTC · re: Junio C Hamano · lore

Re: [PATCH] fix: added new BANNED_EXPL macro for better error messages, new parameter

On Sun, Mar 07, 2021 at 12:34:57PM -0800, Junio C Hamano wrote:
Show 9 quoted lines
> "HG King via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
> >  #undef strcpy
> > -#define strcpy(x,y) BANNED(strcpy)
> > +#define strcpy(x,y) BANNED_EXPL(strcpy, buffer_overflow_risk)
>
> That does not help programmers that much (the above does not say
> what to use instead, for example), and the mechanism inherently
> does not give you sufficient space to give helpful guidance.

Trying to cram information like "why is this function unsafe?" and "what function should I use instead?" seems ill-fitted to trying to a macro which is supposed to have a field for each.

I'm certainly not opposed to making these banned functions clearer, but I do not think that this is the way to do it.

> Adding a comment around each of these definition may be OK.  Upon
> seeing foo_is_a_banned_function, somebody new to the codebase would
> look for where it is banned, and find the above, so that is a good
> place to give guidance.

Perhaps, but all of this information is already covered accurately in the patches that introduced each banned function. So I'm not sure that I even agree that this information is difficult to discover to begin with, but I may be biased.

Thanks, Taylor

Jeff King· Mar 8, 2021, 18:30 UTC · re: Taylor Blau · lore

Re: [PATCH] fix: added new BANNED_EXPL macro for better error messages, new parameter

On Mon, Mar 08, 2021 at 01:05:46PM -0500, Taylor Blau wrote:
Show 9 quoted lines
> > Adding a comment around each of these definition may be OK.  Upon
> > seeing foo_is_a_banned_function, somebody new to the codebase would
> > look for where it is banned, and find the above, so that is a good
> > place to give guidance.
> 
> Perhaps, but all of this information is already covered accurately in
> the patches that introduced each banned function. So I'm not sure that I
> even agree that this information is difficult to discover to begin with,
> but I may be biased.

Yeah, certainly my intent when I introduced banned.h was that people would get the full reasoning from the commit log. I figured Git developers could run "git log -S" or "git blame".

I'm not opposed to comments if somebody wants to write them, but it's not clear to whether people who are actively writing patches for Git have actually run into this situation and been confused, or if this is bikeshedding from the recent posting of banned.h on Hacker News. (Even if it is the latter, I am OK taking a patch that adds comments; I just doubt that it's a good use of anybody's time).

-Peff
Junio C Hamano· Mar 8, 2021, 18:41 UTC · re: Taylor Blau · lore

Re: [PATCH] fix: added new BANNED_EXPL macro for better error messages, new parameter

Taylor Blau <ttaylorr@github.com> writes:
Show 9 quoted lines
>> Adding a comment around each of these definition may be OK.  Upon
>> seeing foo_is_a_banned_function, somebody new to the codebase would
>> look for where it is banned, and find the above, so that is a good
>> place to give guidance.
>
> Perhaps, but all of this information is already covered accurately in
> the patches that introduced each banned function. So I'm not sure that I
> even agree that this information is difficult to discover to begin with,
> but I may be biased.

To help those who are not yet familiar with this codebase but are willing to learn, I tend to agree with you that it is a good idea not to miss opportunities to encourage them to run "git blame" to find out about the project history in the parts of the system that pique their interest. They will make more motivated contributors who are invested in the project, if they stick around.

It would discourage and filter out "drive-by" contributors, though.

Somebody may not yet be interested enough to "git clone" us, but happens to have an extract of distro source tarball and enough motivation to try peeking and tweaking around. To such a curious developer, the "blame" information and log messages with the change are not readily available, so there probably is some balance to be struck.

← back to recent threads