<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi VTK developers,<div><br></div><div>I am performing a series of filters, where some of them are vtkImageConvolve.</div><div><br></div><div>My input vtkImageData is usually close to 100Mbytes, and the execution of my pipeline</div><div>seems to cause some memory fragmentation. Therefore, malloc will eventually fail, causing</div><div>a crash in vtkImageConvolve.</div><div><br></div><div>If malloc fails during the execution of a pipeline, then the scalarPointer of the resulting vtkImageData is NULL. If a connected vtkImageConvolve filter receives such a vtkImageData</div><div>as its input, it tries to access the scalar pointer (which is NULL), causing a crash.</div><div><br></div><div>A solution would be to check the pointers:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(0, 116, 0); "><span style="color: #000000">  </span>// ADDED CODE BEGIN--------</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(0, 116, 0); ">  // Make sure the scalar pointers are valid.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">  <span style="color: #1046da">if</span> (!inData[0][0]->GetScalarPointer() || !outData[0]->GetScalarPointer())</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">    {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span><span style="color: #d01e00">vtkErrorMacro</span>(<< "Execute: input and/or output image does not have any scalar value.");</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(16, 70, 218); "><span style="color: #000000">    </span>return<span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">    }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="color: rgb(0, 116, 0); ">  // ADDED CODE END--------</span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px">  <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">  <span style="color: #1046da">switch</span> (inData[0][0]->GetScalarType())</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">    {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(208, 30, 0); "><span style="color: #000000">    </span>vtkTemplateMacro<span style="color: #000000">(</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">      vtkImageConvolveExecute(<span style="color: #1046da">this</span>, inData[0][0],</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">                              <span style="color: #1046da">static_cast</span><VTK_TT *>(inPtr), outData[0], </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">                              <span style="color: #1046da">static_cast</span><VTK_TT *>(outPtr),</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">                              outExt, id, inInfo));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(16, 70, 218); "><span style="color: #000000">    </span>default<span style="color: #000000">:</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">      <span style="color: #d01e00">vtkErrorMacro</span>(<< "Execute: Unknown ScalarType");</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">      <span style="color: #1046da">return</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">    }</div></div><div><br></div><div>So I was wondering, </div><div>1) Is that the right way to avoid such crashes?</div><div>2) I guess that problem might occur with other filters as well...</div><div><br></div><div>Thanks.</div><div><br></div><div>Mathieu</div><div><br></div></body></html>