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