On 02/16/2012 09:43 PM, julien2412 wrote:
/home/julien/compile-libreoffice/libo/tools/source/generic/poly.cxx:91:9:
warning: Null pointer passed as an argument to a 'nonnull' parameter
         memset( mpPointAry, 0, nInitSize );
         ^       ~~~~~~~~~~
1 warning generated.

Here are the lines :
      78 ImplPolygon::ImplPolygon( sal_uInt16 nInitSize, sal_Bool bFlags  )
      79 {
      80     if ( nInitSize )
      81     {
      82         mpPointAry = (Point*)new
char[(sal_uIntPtr)nInitSize*sizeof(Point)];
      83         memset( mpPointAry, 0, (sal_uIntPtr)nInitSize*sizeof(Point)
);
      84     }
      85     else
      86         mpPointAry = NULL;
      87
      88     if( bFlags )
      89     {
      90         mpFlagAry = new sal_uInt8[ nInitSize ];
      91         memset( mpPointAry, 0, nInitSize );<<<<<  HERE
      92     }
      93     else
      94         mpFlagAry = NULL;
      95
      96     mnRefCount = 1;
      97     mnPoints = nInitSize;
      98 }

[...]

Cppcheck updated today doesn't detect this problem so I confirm fdo#39596
could be useful :-)
(could also be a cppcheck enhancement proposal, I didn't check if it had
already been proposed)

The irony is that, while it apparently found a genuine bug here, the compiler's reasoning might actually be wrong. I'm not 100% sure, but if C only requires that the first argument to memset must be non-null if the third argument is non-zero, then the compiler would obviously not be correct in flagging the above code.

Stephan
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to