From: "Govind Salinas" <blix@sophiasuchtig.com>
To: "Junio C Hamano" <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [Janitors] value could be NULL in config parser
Date: Fri, 8 Feb 2008 11:07:42 -0600 [thread overview]
Message-ID: <5d46db230802080907i2a13c4fep6d4c0af436fd9704@mail.gmail.com> (raw)
In-Reply-To: <7v63x0lzhw.fsf@gitster.siamese.dyndns.org>
On 2/8/08, Junio C Hamano <gitster@pobox.com> wrote:
> If somebody wants to dip his or her toe in git hacking, and is
> tempted to send in a "clean up" patch (e.g. whitespace, coding
> style) that does not really _fix_ anything, please don't.
>
> I have a task of similar complexity (meaning, reasonably easy)
> that is much more useful and appreciated than clean-up patches
> for you.
>
> The callback functions that are passed to git_config() need to
> be audited so that they do not barf when given NULL. Currently,
> many of them are not safe.
>
> A callback function of git_config() is called when the command
> reads value from .git/config and friends. The function takes
> two parameters, var and value. var is never NULL and it is the
> name of the configuration variable found in the file being
> read. value could be either string or NULL.
>
> A NULL value is boolean "true". For example, on MS-DOS, you may
> have something like this:
>
> [core]
> autocrlf
>
> and your callback will be called with var = "core.autocrlf" and
> value = NULL in such a case.
>
> If you want to fix them (you do not have to do all of them, and
> if you would like to help, please make one patch per function
> fixed), the procedure is:
>
> (1) Find calling sites for git_config(). For example, we find
> one in archive-tar.c::write_tar_archive().
>
> int write_tar_archive(struct archiver_args *args)
> {
> int plen = args->base ? strlen(args->base) : 0;
>
> git_config(git_tar_config);
>
> archive_time = args->time;
> verbose = args->verbose;
> ...
>
> (2) Look at the function that is passed to git_config().
>
> static int git_tar_config(const char *var, const char *value)
> {
> if (!strcmp(var, "tar.umask")) {
> if (!strcmp(value, "user")) {
> tar_umask = umask(0);
> umask(tar_umask);
> } else {
> tar_umask = git_config_int(var, value);
> }
> return 0;
> }
> return git_default_config(var, value);
> }
>
> (3) Let's fix it. If the user's configuration has:
>
> [tar]
> umask
>
> it is an illegal configuration, but the code above does not
> check for NULL, and the second strcmp() would fail. If we
> guard that strcmp() with a check against NULL, we would be
> Ok. git_config_int() will correctly barf telling the user
> that "tar.umask" configuration is wrong.
>
> (4) Then send in a patch. Again, one patch per fixed function,
> please. The message may look like this:
>
> -- >8 --
> [PATCH] archive-tar.c: guard config parser from value=NULL
>
> Signed-off-by: A U Thor <author@example.com>
>
> archive-tar.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/archive-tar.c b/archive-tar.c
> index e1bced5..30aa2e2 100644
> --- a/archive-tar.c
> +++ b/archive-tar.c
> @@ -222,7 +222,7 @@ static void write_global_extended_header(const unsigned char *sha1)
> static int git_tar_config(const char *var, const char *value)
> {
> if (!strcmp(var, "tar.umask")) {
> - if (!strcmp(value, "user")) {
> + if (value && !strcmp(value, "user")) {
> tar_umask = umask(0);
> umask(tar_umask);
> } else {
> -
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
I can try my hand at that. I will send some patches later today (after work).
-Govind
next prev parent reply other threads:[~2008-02-08 17:08 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-08 6:43 [Janitors] value could be NULL in config parser Junio C Hamano
2008-02-08 14:26 ` [PATCH] archive-tar.c: guard config parser from value=NULL Miklos Vajna
2008-02-08 14:26 ` [PATCH] builtin-gc.c: " Miklos Vajna
2008-02-08 14:26 ` [PATCH] remote.c: " Miklos Vajna
2008-02-08 16:34 ` Michele Ballabio
2008-02-08 14:27 ` [PATCH] setup.c: " Miklos Vajna
2008-02-08 16:34 ` Michele Ballabio
2008-02-08 21:29 ` Miklos Vajna
2008-02-08 17:07 ` Govind Salinas [this message]
2008-02-09 1:20 ` [Janitors] value could be NULL in config parser Govind Salinas
2008-02-09 5:41 ` Christian Couder
2008-02-09 6:04 ` Junio C Hamano
2008-02-09 10:18 ` Christian Couder
2008-02-09 13:15 ` Christian Couder
2008-02-09 20:11 ` Govind Salinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5d46db230802080907i2a13c4fep6d4c0af436fd9704@mail.gmail.com \
--to=blix@sophiasuchtig.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).