This is an automated email from the git hooks/post-receive script. tille pushed a commit to branch master in repository r-cran-rsqlite.
commit cffd835e408e6d689dd815a63390ef7067ea7566 Author: Andreas Tille <[email protected]> Date: Mon Dec 12 22:39:43 2016 +0100 New upstream version 1.1-1 --- DESCRIPTION | 8 ++++---- MD5 | 11 ++++++----- NEWS.md | 7 ++++++- inst/doc/RSQLite.html | 20 +++++++------------- src/SqliteDataFrame.cpp | 8 ++++++-- src/SqliteDataFrame.h | 2 +- tests/testthat/test-blob.R | 10 ++++++++++ 7 files changed, 40 insertions(+), 26 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 861108b..636bca9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: RSQLite -Version: 1.1 -Date: 2016-11-24 +Version: 1.1-1 +Date: 2016-12-10 Title: 'SQLite' Interface for R Authors@R: c( person("Kirill", "Müller", role = c("aut", "cre"), email = "[email protected]"), @@ -30,7 +30,7 @@ Collate: 'RcppExports.R' 'SQLiteConnection.R' 'SQLiteDriver.R' VignetteBuilder: knitr RoxygenNote: 5.0.1.9000 NeedsCompilation: yes -Packaged: 2016-11-25 14:49:05 UTC; muelleki +Packaged: 2016-12-10 13:38:36 UTC; muelleki Author: Kirill Müller [aut, cre], Hadley Wickham [aut], David A. James [aut], @@ -41,4 +41,4 @@ Author: Kirill Müller [aut, cre], RStudio [cph] Maintainer: Kirill Müller <[email protected]> Repository: CRAN -Date/Publication: 2016-11-27 16:31:52 +Date/Publication: 2016-12-10 23:13:44 diff --git a/MD5 b/MD5 index 69cbe76..4238ae7 100644 --- a/MD5 +++ b/MD5 @@ -1,6 +1,6 @@ -6b7e10d9f310463569caed0cc039285a *DESCRIPTION +110ed6642069470b39038128b93a6bba *DESCRIPTION 5b447ee7ea82128e5e84f7d0ce95a1a7 *NAMESPACE -464df70e1e0408208ccd2712b05b5902 *NEWS.md +b85c9b0092f1f8b85f5f79d89d6f00ec *NEWS.md c15ee8d6d02f96ad33ce3e94a4b6c2bb *R/RcppExports.R e32bdff52325c7022e0a2a8ccec1bb3e *R/SQLiteConnection.R 9c1a0cd57d6167ce40aad1594766a7ec *R/SQLiteDriver.R @@ -22,7 +22,7 @@ b114d50cf8fa6344f59229013182e3c2 *R/query.R 6a6016ed370b49203dbc6e2c3f9160d3 *inst/db/datasets.sqlite 64c49c15bffe33bd5d1c1dcc17bb7ef3 *inst/doc/RSQLite.R 1d1168e86dce56588a7f3f8164bd745d *inst/doc/RSQLite.Rmd -e2109838ac145a2a57943302863f2b3b *inst/doc/RSQLite.html +153d77aa3a094af3c4448444d7f47f86 *inst/doc/RSQLite.html f847d86acc42d042b1d17914ba06f4b7 *man/SQLite.Rd c8ee88b21828631ff2f92c630678f07d *man/SQLiteConnection-class.Rd 97a4eef2c56e01a864b58aa42136097f *man/SQLiteDriver-class.Rd @@ -57,8 +57,8 @@ e61282b791761bc3f5dd1e3a2f94202a *src/RSQLite.h 4588566f59dde67bbbf252411ef47019 *src/RcppExports.cpp b7fa5ddb2e8810ce977b971a9fc28124 *src/SqliteConnection.cpp 40d6d47d2fb85d33a9188d82a390889d *src/SqliteConnection.h -466418351fbdc85202e429184a16ae42 *src/SqliteDataFrame.cpp -2fc081b9cfd4531a7203771c2a5b99f6 *src/SqliteDataFrame.h +3111cdeba9d8f458738d20ee960c2268 *src/SqliteDataFrame.cpp +7a0317b200ce6981ed5177fae9ce33bc *src/SqliteDataFrame.h 56712bfcbacb448a6349db5e78415821 *src/SqliteResult.cpp 3031c87bb921fb380e1674b6aa5f7958 *src/SqliteResult.h c3a9b8e59b4c1bae79e15b749d9865eb *src/SqliteResultImpl.cpp @@ -87,6 +87,7 @@ e12c53bdd0c770bb653bccf292c32dfa *tests/testthat/helper-astyle.R 3c1b90de2ec214764a3bcdbbf290639c *tests/testthat/test-affinity.R b0fe240202730cff80dde6ab7cabb2e8 *tests/testthat/test-astyle.R 1107b6f69131fc566c88e937f7a13a1a *tests/testthat/test-basic-types.R +f876868df2f30d2b6199065aae0568ce *tests/testthat/test-blob.R 0e9afd502298f4e23b02806f4d71eb90 *tests/testthat/test-data-type.R ad3f99cc3a64c858303503df39e31581 *tests/testthat/test-dbClearResult.R 8887b6200c287f8516c023ecf4e985d9 *tests/testthat/test-dbConnect.R diff --git a/NEWS.md b/NEWS.md index 2e21bd9..d69bb04 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +## RSQLite 1.1-1 (2016-12-10) + +- Fix protection issue that could lead to memory access errors when fetching `BLOB` data (#192, #194, @MikeBadescu). + + # RSQLite 1.1 (2016-11-25) - New maintainer: Kirill Müller. @@ -149,7 +154,7 @@ - Differential reverse dependency checks. -- Added upgrade script for sqlite3 sources to the `src-raw` directory. +- Added upgrade script for sqlite3 sources and creation script for the datasets database to the `data-raw` directory. # Version 1.0.0 diff --git a/inst/doc/RSQLite.html b/inst/doc/RSQLite.html index 9ef7bd4..ccf36df 100644 --- a/inst/doc/RSQLite.html +++ b/inst/doc/RSQLite.html @@ -12,7 +12,7 @@ <meta name="author" content="Hadley Wickham" /> -<meta name="date" content="2016-11-25" /> +<meta name="date" content="2016-12-10" /> <title>RSQLite</title> @@ -70,7 +70,7 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf <h1 class="title toc-ignore">RSQLite</h1> <h4 class="author"><em>Hadley Wickham</em></h4> -<h4 class="date"><em>2016-11-25</em></h4> +<h4 class="date"><em>2016-12-10</em></h4> @@ -82,12 +82,10 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf <p>To create a new SQLite database, you simply supply the filename to <code>dbConnect()</code>:</p> <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">mydb <-<span class="st"> </span><span class="kw">dbConnect</span>(RSQLite::<span class="kw">SQLite</span>(), <span class="st">"my-db.sqlite"</span>) <span class="kw">dbDisconnect</span>(mydb) -<span class="co">#> [1] TRUE</span> <span class="kw">unlink</span>(<span class="st">"my-db.sqlite"</span>)</code></pre></div> <p>If you just need a temporary database, use either <code>""</code> (for an on-disk database) or <code>":memory:"</code> or <code>"file::memory:"</code> (for a in-memory database). This database will be automatically deleted when you disconnect from it.</p> <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">mydb <-<span class="st"> </span><span class="kw">dbConnect</span>(RSQLite::<span class="kw">SQLite</span>(), <span class="st">""</span>) -<span class="kw">dbDisconnect</span>(mydb) -<span class="co">#> [1] TRUE</span></code></pre></div> +<span class="kw">dbDisconnect</span>(mydb)</code></pre></div> </div> <div id="loading-data" class="section level2"> <h2>Loading data</h2> @@ -141,8 +139,7 @@ while (!<span class="kw">dbHasCompleted</span>(rs)) { <span class="co">#> [1] 10</span> <span class="co">#> [1] 10</span> <span class="co">#> [1] 2</span> -<span class="kw">dbClearResult</span>(rs) -<span class="co">#> [1] TRUE</span></code></pre></div> +<span class="kw">dbClearResult</span>(rs)</code></pre></div> </div> <div id="multiple-parameterised-queries" class="section level2"> <h2>Multiple parameterised queries</h2> @@ -154,15 +151,13 @@ while (!<span class="kw">dbHasCompleted</span>(rs)) { <span class="kw">dbBind</span>(rs, <span class="dt">param =</span> <span class="kw">list</span>(<span class="dt">x =</span> <span class="dv">4</span>)) <span class="kw">nrow</span>(<span class="kw">dbFetch</span>(rs)) <span class="co">#> [1] 0</span> -<span class="kw">dbClearResult</span>(rs) -<span class="co">#> [1] TRUE</span></code></pre></div> +<span class="kw">dbClearResult</span>(rs)</code></pre></div> <p>You can also pass multiple parameters in one call to <code>dbBind()</code>:</p> <div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">rs <-<span class="st"> </span><span class="kw">dbSendQuery</span>(mydb, <span class="st">'SELECT * FROM iris WHERE "Sepal.Length" = :x'</span>) <span class="kw">dbBind</span>(rs, <span class="dt">param =</span> <span class="kw">list</span>(<span class="dt">x =</span> <span class="kw">seq</span>(<span class="dv">4</span>, <span class="fl">4.4</span>, <span class="dt">by =</span> <span class="fl">0.1</span>))) <span class="kw">nrow</span>(<span class="kw">dbFetch</span>(rs)) <span class="co">#> [1] 4</span> -<span class="kw">dbClearResult</span>(rs) -<span class="co">#> [1] TRUE</span></code></pre></div> +<span class="kw">dbClearResult</span>(rs)</code></pre></div> </div> <div id="statements" class="section level2"> <h2>Statements</h2> @@ -173,8 +168,7 @@ rs <-<span class="st"> </span><span class="kw">dbSendStatement</span>(mydb, < <span class="kw">dbBind</span>(rs, <span class="dt">param =</span> <span class="kw">list</span>(<span class="dt">x =</span> <span class="fl">4.5</span>)) <span class="kw">dbGetRowsAffected</span>(rs) <span class="co">#> [1] 4</span> -<span class="kw">dbClearResult</span>(rs) -<span class="co">#> [1] TRUE</span></code></pre></div> +<span class="kw">dbClearResult</span>(rs)</code></pre></div> </div> diff --git a/src/SqliteDataFrame.cpp b/src/SqliteDataFrame.cpp index 38bb905..c055b8e 100644 --- a/src/SqliteDataFrame.cpp +++ b/src/SqliteDataFrame.cpp @@ -32,7 +32,7 @@ bool SqliteDataFrame::set_col_values() { } for (int j = 0; j < out.length(); ++j) { - SEXP col = out[j]; + RObject col = out[j]; set_col_value(col, j); out[j] = col; } @@ -77,7 +77,11 @@ void SqliteDataFrame::alloc_missing_cols() { } } -void SqliteDataFrame::set_col_value(SEXP& col, const int j) { +void SqliteDataFrame::set_col_value(RObject& col, const int j) { + // col needs to be PROTECTed because it can be allocated + // just before a RAW vector that holds BLOB data is (#192). + // The easiest way to protect is to make it an RObject. + SEXPTYPE type = types[j]; int column_type = sqlite3_column_type(stmt, j); diff --git a/src/SqliteDataFrame.h b/src/SqliteDataFrame.h index c6317a1..b2a3041 100644 --- a/src/SqliteDataFrame.h +++ b/src/SqliteDataFrame.h @@ -24,7 +24,7 @@ public: List get_data(std::vector<SEXPTYPE>& types); private: - void set_col_value(SEXP& col, const int j); + void set_col_value(RObject& col, const int j); void finalize_cols(); void alloc_missing_cols(); diff --git a/tests/testthat/test-blob.R b/tests/testthat/test-blob.R new file mode 100644 index 0000000..fbd78af --- /dev/null +++ b/tests/testthat/test-blob.R @@ -0,0 +1,10 @@ +context("blob") + +test_that("adding large blob to table survives valgrind check (#192)", { + con <- dbConnect(SQLite()) + on.exit(dbDisconnect(con), add = TRUE) + + data <- data.frame(id = 1, data = I(list(raw(1e8)))) + dbWriteTable(con, "data", data) + dbReadTable(con, "data") +}) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/r-cran-rsqlite.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
