It is a bug in the interpolation API.

It doesn't account for the size of the region in which the function evaluation is done.

Only the point at which an evaluation is done is ever checked in the hierarchy of code that is called. The points which are evaluated to get the interpolated value are not checked, and if they are not valid, then an invalid memory read or segmentation fault occurs.

--Simon


On 9/20/2016 12:00 PM, insight-developers-requ...@itk.org wrote:
Send Insight-developers mailing list submissions to
        insight-developers@itk.org

To subscribe or unsubscribe via the World Wide Web, visit
        
https://urldefense.proofpoint.com/v2/url?u=http-3A__public.kitware.com_mailman_listinfo_insight-2Ddevelopers&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=WbKAgN9KwXSjz8u0FDu7jhXRlLIeA5UUkqkvHeli9ek&e=
or, via email, send a message with subject or body 'help' to
        insight-developers-requ...@itk.org

You can reach the person managing the list at
        insight-developers-ow...@itk.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Insight-developers digest..."


Today's Topics:

    1.
       itk::LinearInterpolateImageFunction::EvaluateAtContinuousIndex()
       -- what is intended behaviour outside of image? (Steve M. Robbins)
    2. Re:
       itk::LinearInterpolateImageFunction::EvaluateAtContinuousIndex()
       -- what is intended behaviour outside of image? (D?enan Zuki?)


----------------------------------------------------------------------

Message: 1
Date: Mon, 19 Sep 2016 16:38:58 -0500
From: "Steve M. Robbins" <st...@sumost.ca>
To: ITK developer mailing list <insight-developers@itk.org>
Cc: elas...@bigr.nl
Subject: [ITK-dev]
        itk::LinearInterpolateImageFunction::EvaluateAtContinuousIndex() --
        what is intended behaviour outside of image?
Message-ID: <20160919213858.yx4rb56iie4k7...@sumost.ca>
Content-Type: text/plain; charset="us-ascii"

Hi,

The doc for this function doesn't make it clear whether the user may
call it with an index point that lies outside the image or not.  I can
tell you that the code doesn't check the bounds, resulting in
uninitialized memory reads [1].

My question is: is that a user error or bug in the evaluation
function?

If I read the ITK 4.8.2 code correctly, it looks like it takes care of
the lower index bound, but not the upper index bound -- so ITK bug?


Thanks,
-Steve


[1] 
https://urldefense.proofpoint.com/v2/url?u=http-3A__my.cdash.org_viewDynamicAnalysisFile.php-3Fid-3D3780109&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=dAaswv1c2FewCPDUiwr98T1ca9lOmmzukQgitIsrXok&e=

Elastix test suite creates a 2D image of size 10x10, then calls
the interpolator with coordinates { 12.7, 15.3 }.  I believe
that is the cause of this diagnostic:

UMR ==26834== Invalid read of size 2
==26834==    at 0x62AE77: itk::LinearInterpolateImageFunction<itk::Image<short, 2u>, 
double>::EvaluateOptimized(itk::LinearInterpolateImageFunction<itk::Image<short, 2u>, 
double>::Dispatch<2u> const&, itk::ContinuousIndex<double, 2u> const&) const 
(itkLinearInterpolateImageFunction.h:172)
==26834==    by 0x62228A: itk::LinearInterpolateImageFunction<itk::Image<short, 2u>, 
double>::EvaluateAtContinuousIndex(itk::ContinuousIndex<double, 2u> const&) const 
(itkLinearInterpolateImageFunction.h:99)
==26834==    by 0x61C431: bool TestInterpolators<2u>() 
(itkAdvancedLinearInterpolatorTest.cxx:171)
==26834==    by 0x616CD2: main (itkAdvancedLinearInterpolatorTest.cxx:279)

(Later, the code does an out-of-image call in 3D as well)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: 
<https://urldefense.proofpoint.com/v2/url?u=http-3A__public.kitware.com_pipermail_insight-2Ddevelopers_attachments_20160919_ed2a4b74_attachment-2D0001.sig&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=7_cM6yi5GMBfxeVRyX9FDCNaXTT_nwTsg01NLa-30j0&e=
 >

------------------------------

Message: 2
Date: Tue, 20 Sep 2016 09:00:24 -0400
From: D?enan Zuki? <dzen...@gmail.com>
To: "Steve M. Robbins" <st...@sumost.ca>
Cc: "Hans J. Johnson" <hans-john...@uiowa.edu>, ITK developer mailing
        list <insight-developers@itk.org>, elas...@bigr.nl
Subject: Re: [ITK-dev]
        itk::LinearInterpolateImageFunction::EvaluateAtContinuousIndex() --
        what is intended behaviour outside of image?
Message-ID:
        <CAPf2UMS9VXW9UAQ0PwkFNiRHJZNqOwm1C7deyYYF+uZ=g2g...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi Steve,

this function is not supposed to do bounds checking. Bounds checking can be
done with IsInsideBuffer(). The commit which introduced the code:

Revision: 6abbc7969a90786c4c73f5d191f634db536c2d1d
Author: Hans Johnson <hans-john...@uiowa.edu>
Date: 2010-08-05 22:35:42
Message:
Made USE_OPTIMIZED_REGISTRATION the default


The ITK_USE_OPTIMIZED_REGISTRATION is now the default
behavior.  There is no longer another option.

Maybe Hans can explain why the lower bounds are checked but not the upper.
Otherwise you can try removing them and submitting
<https://urldefense.proofpoint.com/v2/url?u=http-3A__itk.org_Wiki_ITK_Git_Develop&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=ZfDuSqeuqNURhOT8lNMXJXYMBhp73A4icvZnVrpogxA&e=
 > a patch Steve.

Regards,
D?enan

On Mon, Sep 19, 2016 at 5:38 PM, Steve M. Robbins <st...@sumost.ca> wrote:

Hi,

The doc for this function doesn't make it clear whether the user may
call it with an index point that lies outside the image or not.  I can
tell you that the code doesn't check the bounds, resulting in
uninitialized memory reads [1].

My question is: is that a user error or bug in the evaluation
function?

If I read the ITK 4.8.2 code correctly, it looks like it takes care of
the lower index bound, but not the upper index bound -- so ITK bug?


Thanks,
-Steve


[1] 
https://urldefense.proofpoint.com/v2/url?u=http-3A__my.cdash.org_viewDynamicAnalysisFile.php-3Fid-3D3780109&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=dAaswv1c2FewCPDUiwr98T1ca9lOmmzukQgitIsrXok&e=

Elastix test suite creates a 2D image of size 10x10, then calls
the interpolator with coordinates { 12.7, 15.3 }.  I believe
that is the cause of this diagnostic:

UMR ==26834== Invalid read of size 2
==26834==    at 0x62AE77: itk::LinearInterpolateImageFunction<itk::Image<short,
2u>, 
double>::EvaluateOptimized(itk::LinearInterpolateImageFunction<itk::Image<short,
2u>, double>::Dispatch<2u> const&, itk::ContinuousIndex<double, 2u> const&)
const (itkLinearInterpolateImageFunction.h:172)
==26834==    by 0x62228A: itk::LinearInterpolateImageFunction<itk::Image<short,
2u>, double>::EvaluateAtContinuousIndex(itk::ContinuousIndex<double, 2u>
const&) const (itkLinearInterpolateImageFunction.h:99)
==26834==    by 0x61C431: bool TestInterpolators<2u>() (
itkAdvancedLinearInterpolatorTest.cxx:171)
==26834==    by 0x616CD2: main (itkAdvancedLinearInterpolatorTest.cxx:279)

(Later, the code does an out-of-image call in 3D as well)


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
https://urldefense.proofpoint.com/v2/url?u=http-3A__www.kitware.com_opensource_opensource.html&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=Rc4Rwkix_LmsETzhqKvf7Q-kEcFPtKkVb1xzRn5k1B8&e=

Kitware offers ITK Training Courses, for more information visit:
https://urldefense.proofpoint.com/v2/url?u=http-3A__kitware.com_products_protraining.php&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=Z9xgtbLlbYxa0EsHHoBoxlm_7hRlGiNDxmAo36JDWSg&e=

Please keep messages on-topic and check the ITK FAQ at:
https://urldefense.proofpoint.com/v2/url?u=http-3A__www.itk.org_Wiki_ITK-5FFAQ&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=r4DOIPoHB1kBr-eH7IGUEB4Bz0c_tjw6UM2TcWf3UE0&e=

Follow this link to subscribe/unsubscribe:
https://urldefense.proofpoint.com/v2/url?u=http-3A__public.kitware.com_mailman_listinfo_insight-2Ddevelopers&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=WbKAgN9KwXSjz8u0FDu7jhXRlLIeA5UUkqkvHeli9ek&e=


-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<https://urldefense.proofpoint.com/v2/url?u=http-3A__public.kitware.com_pipermail_insight-2Ddevelopers_attachments_20160920_87669e73_attachment-2D0001.html&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=IqLCJKLvdLlRAask4nBb1yqbajH_LGSvGX-5JE1Fdgw&e=
 >

------------------------------

Subject: Digest Footer

_______________________________________________
Insight-developers mailing list
Insight-developers@itk.org
https://urldefense.proofpoint.com/v2/url?u=http-3A__public.kitware.com_mailman_listinfo_insight-2Ddevelopers&d=CwICAg&c=qS4goWBT7poplM69zy_3xhKwEW14JZMSdioCoppxeFU&r=spboX-Qn5Dn-uyspT__O0BtpSEF5erHIiRAwdzSaa_QAQ58afxHcHSMuB76pSgfl&m=HFczLLy-F4uhK-1hDmjBJAGPlMm2sUfpyYm6eA1dNzw&s=WbKAgN9KwXSjz8u0FDu7jhXRlLIeA5UUkqkvHeli9ek&e=


------------------------------

End of Insight-developers Digest, Vol 149, Issue 8
**************************************************

--
Simon K. Warfield, Ph.D.
Thorne Griscom Chair and Professor of Radiology
Harvard Medical School
Director of Radiology Research
Director Computational Radiology Laboratory
Department of Radiology
Boston Children's Hospital

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-developers

Reply via email to