std::vector<> aFoo(3) type clang plugin request ? =)

Noel Grandin noelgrandin at gmail.com
Sat Jun 20 02:33:04 PDT 2015


Sounds reasonable. Note that parts of the db code reserved an entry at the
start of every row for something. I have it on my list if things to clean
up.
On Sat, 20 Jun 2015 at 11:15, Michael Meeks <michael.meeks at collabora.com>
wrote:

> Hi Noel,
>
>         So - another annoying clang plugin request ;-) I just fell over:
>
>         https://bugs.documentfoundation.org/show_bug.cgi?id=92194
>
>         where by 'fell' I mean several hours of debugging horrible template
> mess [ which is inevitably routinely going down the slow paths and we'd
> do way better to use pixman IMNSHO ;-]. Anyhow - at the bottom was this:
>
>              std::vector< basebmp::Color > aDevPal(2);
> -            aDevPal.push_back( basebmp::Color( 0, 0, 0 ) );
> -            aDevPal.push_back( basebmp::Color( 0xff, 0xff, 0xff ) );
> +            aDevPal[0] = basebmp::Color( 0, 0, 0 );
> +            aDevPal[1] = basebmp::Color( 0xff, 0xff, 0xff );
>
>         Basically a mis-understanding of how std::vector works when you
> pre-allocate its size - these slots get some (default) contents - in
> this case the masks' 1 & 0 state were both default black ;-)
>
>         Anyhow - I imagine there are a ton of these around the code-base;
> Tor
> did some quick greps and quickly found:
>
> mysqlc/source/mysqlc_databasemetadata.cxx:1080
>
>     for (sal_uInt32 i = 0; i < 2; i++) {
>         if (m_rConnection.getMysqlVersion() >= requiredVersion[i]) {
>             std::vector< Any > aRow(1);
>
>  aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(table_types[i],
> encoding)));
>
>         "and many other similar places in mysqlc"
>
> sax/qa/cppunit/test_converter.cxx:667
>
>     std::vector< sal_Int8 > tempSeq(4);
>     for(sal_Int8 i = 0; i<4; ++i)
>         tempSeq.push_back(i);
>
>
>         Which also looks highly suspicious =)
>
>         And I was wondering ... could there be a clang plugin for that ? in
> general I think it's prolly a good swap to discard the use-case of
> someone wanting <N> default-initialized items at the front of a vector
> and always warn on it ;-)
>
>         So I suppose the check would be for a size reservation on a vector
> followed by push_back - rather than some array indexing - does that make
> sense ? or did I go crazy ;-)
>
>         Thanks,
>
>                 Michael.
>
> --
>  michael.meeks at collabora.com  <><, Pseudo Engineer, itinerant idiot
>
> _______________________________________________
> LibreOffice mailing list
> LibreOffice at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/libreoffice
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20150620/0544b315/attachment.html>


More information about the LibreOffice mailing list