# [PATCH] xdiff/xprepare: initialise xdlclassifier_t cf in xdl_prepare_env()

4 messages from 2011-08-31 to 2011-09-02. Participants: Tay Ray Chuan, Junio C Hamano.
Thread: https://gitlist.dev/t/28266

## Tay Ray Chuan, 2011-08-31 04:48

Subject: [PATCH] xdiff/xprepare: initialise xdlclassifier_t cf in xdl_prepare_env()
Message-ID: <1314766126-5060-1-git-send-email-rctay89@gmail.com>
URL: https://gitlist.dev/e/1314766126-5060-1-git-send-email-rctay89%40gmail.com

```
Ensure that the xdl_free_classifier() call on xdlclassifier_t cf is safe
even if xdl_init_classifier() isn't called. This may occur in the case
where diff is run with --histogram and a call to, say, xdl_prepare_ctx()
fails.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---

This should go into 'rc/histogram-diff' in 'next'.

 xdiff/xprepare.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
index 620fc9a..4323596 100644
--- a/xdiff/xprepare.c
+++ b/xdiff/xprepare.c
@@ -239,6 +239,9 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 	long enl1, enl2, sample;
 	xdlclassifier_t cf;
 
+	cf.rchash = NULL;
+	cf.ncha.head = NULL;
+
 	/*
 	 * For histogram diff, we can afford a smaller sample size and
 	 * thus a poorer estimate of the number of lines, as the hash
-- 
1.7.6.1.706.gaa5cf

```

## Junio C Hamano, 2011-08-31 17:02

Subject: Re: [PATCH] xdiff/xprepare: initialise xdlclassifier_t cf in xdl_prepare_env()
Message-ID: <7vei01zf89.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vei01zf89.fsf%40alter.siamese.dyndns.org
In-Reply-To: <1314766126-5060-1-git-send-email-rctay89@gmail.com>

```
Tay Ray Chuan <rctay89@gmail.com> writes:

> Ensure that the xdl_free_classifier() call on xdlclassifier_t cf is safe
> even if xdl_init_classifier() isn't called. This may occur in the case
> where diff is run with --histogram and a call to, say, xdl_prepare_ctx()
> fails.
>
> Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>

Thanks. Did you find this by code inspection?

>  xdiff/xprepare.c |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
> index 620fc9a..4323596 100644
> --- a/xdiff/xprepare.c
> +++ b/xdiff/xprepare.c
> @@ -239,6 +239,9 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
>  	long enl1, enl2, sample;
>  	xdlclassifier_t cf;
>  
> +	cf.rchash = NULL;
> +	cf.ncha.head = NULL;

Would it be more appropriate to use memcpy(&cf, 0, sizeof(cf)) instead, so
that we wouldn't have to worry about a similar breakage when a new field
is added to "struct xdlclassifier" later?

```

## Junio C Hamano, 2011-08-31 17:03

Subject: Re: [PATCH] xdiff/xprepare: initialise xdlclassifier_t cf in xdl_prepare_env()
Message-ID: <7vaaapzf6f.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vaaapzf6f.fsf%40alter.siamese.dyndns.org
In-Reply-To: <7vei01zf89.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano <gitster@pobox.com> writes:

> Tay Ray Chuan <rctay89@gmail.com> writes:
>
>> Ensure that the xdl_free_classifier() call on xdlclassifier_t cf is safe
>> even if xdl_init_classifier() isn't called. This may occur in the case
>> where diff is run with --histogram and a call to, say, xdl_prepare_ctx()
>> fails.
>>
>> Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
>
> Thanks. Did you find this by code inspection?
>
>>  xdiff/xprepare.c |    3 +++
>>  1 files changed, 3 insertions(+), 0 deletions(-)
>>
>> diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
>> index 620fc9a..4323596 100644
>> --- a/xdiff/xprepare.c
>> +++ b/xdiff/xprepare.c
>> @@ -239,6 +239,9 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
>>  	long enl1, enl2, sample;
>>  	xdlclassifier_t cf;
>>  
>> +	cf.rchash = NULL;
>> +	cf.ncha.head = NULL;
>
> Would it be more appropriate to use memcpy(&cf, 0, sizeof(cf)) instead, so

Oops, I meant memset(), obviously.

> that we wouldn't have to worry about a similar breakage when a new field
> is added to "struct xdlclassifier" later?

```

## Tay Ray Chuan, 2011-09-02 07:09

Subject: [PATCH] xdiff/xprepare: initialise xdlclassifier_t cf in xdl_prepare_env()
Message-ID: <1314947363-4596-1-git-send-email-rctay89@gmail.com>
URL: https://gitlist.dev/e/1314947363-4596-1-git-send-email-rctay89%40gmail.com
In-Reply-To: <7vaaapzf6f.fsf@alter.siamese.dyndns.org>

```
Ensure that the xdl_free_classifier() call on xdlclassifier_t cf is safe
even if xdl_init_classifier() isn't called, which is the case when diff
is run with --histogram.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>

---

On Thu, Sep 1, 2011 at 1:02 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Tay Ray Chuan <rctay89@gmail.com> writes:
>
>> Ensure that the xdl_free_classifier() call on xdlclassifier_t cf is safe
>> even if xdl_init_classifier() isn't called. This may occur in the case
>> where diff is run with --histogram and a call to, say, xdl_prepare_ctx()
>> fails.
>>
>> Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
>
> Thanks. Did you find this by code inspection?

If by "code inspection" you meant eye-balling, then yes. :)

On Thu, Sep 1, 2011 at 1:03 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Junio C Hamano <gitster@pobox.com> writes:
> [snip]
>>> @@ -239,6 +239,9 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
>>>      long enl1, enl2, sample;
>>>      xdlclassifier_t cf;
>>>
>>> +    cf.rchash = NULL;
>>> +    cf.ncha.head = NULL;
>>
>> Would it be more appropriate to use memcpy(&cf, 0, sizeof(cf)) instead, so
>
> Oops, I meant memset(), obviously.

Right, thanks.
---
 xdiff/xprepare.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
index 620fc9a..5b676b7 100644
--- a/xdiff/xprepare.c
+++ b/xdiff/xprepare.c
@@ -239,6 +239,8 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 	long enl1, enl2, sample;
 	xdlclassifier_t cf;
 
+	memset(&cf, 0, sizeof(cf));
+
 	/*
 	 * For histogram diff, we can afford a smaller sample size and
 	 * thus a poorer estimate of the number of lines, as the hash
-- 
1.7.6.1.706.gaa5cf

```
