<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to 85: [cppdb]  segfault when using prepared statement with statement that does nothing</title><link>https://sourceforge.net/p/cppcms/bugs/85/</link><description>Recent changes to 85: [cppdb]  segfault when using prepared statement with statement that does nothing</description><atom:link href="https://sourceforge.net/p/cppcms/bugs/85/feed.rss" rel="self"/><language>en</language><lastBuildDate>Mon, 07 Jan 2013 16:06:31 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/cppcms/bugs/85/feed.rss" rel="self" type="application/rss+xml"/><item><title>[cppdb]  segfault when using prepared statement with statement that does nothing</title><link>https://sourceforge.net/p/cppcms/bugs/85/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;When executing a set of query , if at one moment a query contains nothing (i.e empty string/SQL comment only/empty spaces) the execute will generate a segfault here is a sample code &lt;/p&gt;
&lt;p&gt;int SqliteModel::import_sql_file(&lt;br /&gt;
    const std::string &amp;amp;sqlFilePath&lt;br /&gt;
) {&lt;br /&gt;
    try {&lt;br /&gt;
        std::ifstream f(sqlFilePath.c_str());&lt;br /&gt;
        std::string fileStr(&lt;br /&gt;
            (std::istreambuf_iterator(f)),&lt;br /&gt;
            std::istreambuf_iterator()&lt;br /&gt;
        );&lt;br /&gt;
        sqliteDb &amp;lt;&amp;lt; fileStr &amp;lt;&amp;lt; cppdb::exec;&lt;br /&gt;
        size_t current = 0;&lt;br /&gt;
        size_t next = -1;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            current = next + 1;&lt;br /&gt;
            next = fileStr.find_first_of( ";", current );&lt;br /&gt;
            std::string tmpRequest =  fileStr.substr( current, next - current );&lt;br /&gt;
            sqliteDb &amp;lt;&amp;lt; tmpRequest &amp;lt;&amp;lt; cppdb::exec;&lt;br /&gt;
        } while (next != std::string::npos);&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;exception&lt;/span&gt; &lt;span class="n"&gt;const&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;BOOSTER_ERROR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&amp;quot;&lt;span class="n"&gt;cppcms&lt;/span&gt;&amp;quot;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; 1&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; 0&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;and it will segfault (no exception, a old goold segfault) when I try to execute a  string containing nothing or a comment or a set of space with nothing less&lt;br /&gt;
the backtrace generates&lt;/p&gt;
&lt;h1 id="0-0xb61eee96-in-sqlite3_clear_bindings-from-usrlibi386-linux-gnulibsqlite3so0"&gt;0  0xb61eee96 in sqlite3_clear_bindings () from /usr/lib/i386-linux-gnu/libsqlite3.so.0&lt;/h1&gt;
&lt;h1 id="1-0xb7c6433a-in-cppdbsqlite3_backendstatementreset-this0x80710c8"&gt;1  0xb7c6433a in cppdb::sqlite3_backend::statement::reset (this=0x80710c8)&lt;/h1&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;allan&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Desktop&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;projet&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cppdb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;3&lt;span class="p"&gt;.&lt;/span&gt;0&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;drivers&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sqlite3_backend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;226
&lt;/pre&gt;&lt;/div&gt;


&lt;h1 id="2-0xb7d81b95-in-cppdbbackendstatements_cacheput-this0x805d37c-p_in0x80710c8"&gt;2  0xb7d81b95 in cppdb::backend::statements_cache::put (this=0x805d37c, p_in=0x80710c8)&lt;/h1&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;allan&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Desktop&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;projet&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cppdb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;3&lt;span class="p"&gt;.&lt;/span&gt;0&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;146
&lt;/pre&gt;&lt;/div&gt;


&lt;h1 id="3-0xb7d81d43-in-cppdbbackendstatementdispose-p0x80710c8-at-homeallandesktopprojetcppdb-030srcbackendcpp54"&gt;3  0xb7d81d43 in cppdb::backend::statement::dispose (p=0x80710c8) at /home/allan/Desktop/projet/cppdb-0.3.0/src/backend.cpp:54&lt;/h1&gt;
&lt;h1 id="4-0xb7d8bbdb-in-reset-v0x0-this0xbffff43c-at-homeallandesktopprojetcppdb-030cppdbref_ptrh109"&gt;4  0xb7d8bbdb in reset (v=0x0, this=0xbffff43c) at /home/allan/Desktop/projet/cppdb-0.3.0/./cppdb/ref_ptr.h:109&lt;/h1&gt;
&lt;h1 id="5-cppdbstatementstatement-this0xbffff438-__in_chrgwzxhzdk6"&gt;5  cppdb::statement::~statement (this=0xbffff438, __in_chrg=)&lt;/h1&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;allan&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Desktop&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;projet&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cppdb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;3&lt;span class="p"&gt;.&lt;/span&gt;0&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;frontend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;218
&lt;/pre&gt;&lt;/div&gt;


&lt;h1 id="6-0x080536fb-in-modelssqlitemodelimport_sql_filestdstring-const"&gt;6  0x080536fb in models::SqliteModel::import_sql_file(std::string const&amp;amp;) ()&lt;/h1&gt;
&lt;h1 id="7-0x0804f6ec-in-main"&gt;7  0x0804f6ec in main ()&lt;/h1&gt;
&lt;p&gt;which is in line 226 of  sqlite3_backend of cppdb &lt;/p&gt;
&lt;p&gt;sqlite3_clear_bindings(st_);&lt;/p&gt;
&lt;p&gt;st_  being a NULL pointer  (0x0)&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Mon, 07 Jan 2013 16:06:31 -0000</pubDate><guid>https://sourceforge.net174733c44ffa7346d2f0afac7df217370a9329f0</guid></item></channel></rss>