From: stephan Date: Mon, 1 Jan 2024 06:58:32 +0000 (+0000) Subject: JNI: move the ByteBuffer-using APIs from public to package visibility for the time... X-Git-Tag: version-3.45.0~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=307f326ba3d448c55abd04e241d46af903667653;p=thirdparty%2Fsqlite.git JNI: move the ByteBuffer-using APIs from public to package visibility for the time being because they have UB-inducing possibilities which need to be worked out. Update test code to account for a change in custom FTS5 columntext() impls. FossilOrigin-Name: dc501275fcfab3ad9b6ebbadf7588b225a9dd07a0abac5be83d96f15bfba99e9 --- diff --git a/ext/jni/src/org/sqlite/jni/capi/CApi.java b/ext/jni/src/org/sqlite/jni/capi/CApi.java index 89d62849c0..b5d08306e2 100644 --- a/ext/jni/src/org/sqlite/jni/capi/CApi.java +++ b/ext/jni/src/org/sqlite/jni/capi/CApi.java @@ -256,7 +256,7 @@ public final class CApi { sqlite3_bind_nio_buffer(). */ @Experimental - public static int sqlite3_bind_blob( + /*public*/ static int sqlite3_bind_blob( @NotNull sqlite3_stmt stmt, int ndx, @Nullable java.nio.ByteBuffer data, int begin, int n ){ @@ -269,7 +269,7 @@ public final class CApi { final two arguments. */ @Experimental - public static int sqlite3_bind_blob( + /*public*/ static int sqlite3_bind_blob( @NotNull sqlite3_stmt stmt, int ndx, @Nullable java.nio.ByteBuffer data ){ return sqlite3_bind_nio_buffer(stmt, ndx, data, 0, -1); @@ -346,7 +346,7 @@ public final class CApi { @see https://docs.oracle.com/javase/8/docs/api/java/nio/Buffer.html */ @Experimental - public static native int sqlite3_bind_nio_buffer( + /*public*/ static native int sqlite3_bind_nio_buffer( @NotNull sqlite3_stmt stmt, int ndx, @Nullable java.nio.ByteBuffer data, int beginPos, int howMany ); @@ -356,7 +356,7 @@ public final class CApi { contents, up to its limit() (as opposed to its capacity()). */ @Experimental - public static int sqlite3_bind_nio_buffer( + /*public*/ static int sqlite3_bind_nio_buffer( @NotNull sqlite3_stmt stmt, int ndx, @Nullable java.nio.ByteBuffer data ){ return sqlite3_bind_nio_buffer(stmt, ndx, data, 0, -1); @@ -600,7 +600,7 @@ public final class CApi { sqlite3_blob_read() (0 on success). */ @Experimental - public static int sqlite3_blob_read_nio_buffer( + /*public*/ static int sqlite3_blob_read_nio_buffer( @NotNull sqlite3_blob src, int srcOffset, @NotNull java.nio.ByteBuffer tgt, int tgtOffset, int howMany ){ @@ -624,7 +624,7 @@ public final class CApi { for any reason. */ @Experimental - public static java.nio.ByteBuffer sqlite3_blob_read_nio_buffer( + /*public*/ static java.nio.ByteBuffer sqlite3_blob_read_nio_buffer( @NotNull sqlite3_blob src, int srcOffset, int howMany ){ if( !JNI_SUPPORTS_NIO || src==null ) return null; @@ -645,7 +645,7 @@ public final class CApi { Overload alias for sqlite3_blob_read_nio_buffer(). */ @Experimental - public static int sqlite3_blob_read( + /*public*/ static int sqlite3_blob_read( @NotNull sqlite3_blob src, int srcOffset, @NotNull java.nio.ByteBuffer tgt, int tgtOffset, int howMany @@ -668,7 +668,7 @@ public final class CApi { the result of the underlying call to sqlite3_blob_read(). */ @Experimental - public static int sqlite3_blob_read( + /*public*/ static int sqlite3_blob_read( @NotNull sqlite3_blob src, @NotNull java.nio.ByteBuffer tgt ){ @@ -727,7 +727,7 @@ public final class CApi { returns the result of the underlying call to sqlite3_blob_read(). */ @Experimental - public static int sqlite3_blob_write_nio_buffer( + /*public*/ static int sqlite3_blob_write_nio_buffer( @NotNull sqlite3_blob tgt, int tgtOffset, @NotNull java.nio.ByteBuffer src, int srcOffset, int howMany @@ -756,7 +756,7 @@ public final class CApi { of b. */ @Experimental - public static int sqlite3_blob_write( + /*public*/ static int sqlite3_blob_write( @NotNull sqlite3_blob tgt, int tgtOffset, @NotNull java.nio.ByteBuffer src ){ @@ -770,7 +770,7 @@ public final class CApi { of tgt. */ @Experimental - public static int sqlite3_blob_write( + /*public*/ static int sqlite3_blob_write( @NotNull sqlite3_blob tgt, @NotNull java.nio.ByteBuffer src ){ @@ -926,7 +926,7 @@ public final class CApi { would return null for the same inputs. */ @Experimental - public static native java.nio.ByteBuffer sqlite3_column_nio_buffer( + /*public*/ static native java.nio.ByteBuffer sqlite3_column_nio_buffer( @NotNull sqlite3_stmt stmt, int ndx ); @@ -1848,7 +1848,7 @@ public final class CApi { then this function behaves like sqlite3_result_error_toobig(). */ @Experimental - public static native void sqlite3_result_nio_buffer( + /*public*/ static native void sqlite3_result_nio_buffer( @NotNull sqlite3_context cx, @Nullable java.nio.ByteBuffer blob, int begin, int n ); @@ -1858,7 +1858,7 @@ public final class CApi { as the result blob content. */ @Experimental - public static void sqlite3_result_nio_buffer( + /*public*/ static void sqlite3_result_nio_buffer( @NotNull sqlite3_context cx, @Nullable java.nio.ByteBuffer blob ){ sqlite3_result_nio_buffer(cx, blob, 0, -1); @@ -1963,7 +1963,7 @@ public final class CApi { sqlite3_result_nio_buffer(). */ @Experimental - public static void sqlite3_result_blob( + /*public*/ static void sqlite3_result_blob( @NotNull sqlite3_context cx, @Nullable java.nio.ByteBuffer blob, int begin, int n ){ @@ -1975,7 +1975,7 @@ public final class CApi { sqlite3_result_nio_buffer(). */ @Experimental - public static void sqlite3_result_blob( + /*public*/ static void sqlite3_result_blob( @NotNull sqlite3_context cx, @Nullable java.nio.ByteBuffer blob ){ sqlite3_result_nio_buffer(cx, blob); @@ -2387,7 +2387,7 @@ public final class CApi { would return null for the same input. */ @Experimental - public static native java.nio.ByteBuffer sqlite3_value_nio_buffer( + /*public*/ static native java.nio.ByteBuffer sqlite3_value_nio_buffer( @NotNull sqlite3_value v ); diff --git a/ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java b/ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java index c4264c5417..095e649caf 100644 --- a/ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java +++ b/ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java @@ -625,10 +625,20 @@ public class TesterFts5 { "SELECT fts5_columntext(ft, 1) FROM ft('x') ORDER BY rowid", "[x, x, x y z, x z, x y z, x]" ); - do_execsql_test(db, - "SELECT fts5_columntext(ft, 2) FROM ft('x') ORDER BY rowid", - "[null, null, null, null, null, null]" - ); + boolean threw = false; + try{ + /* columntext() used to return NULLs when given an out-of bounds column + but now results in a range error. */ + do_execsql_test(db, + "SELECT fts5_columntext(ft, 2) FROM ft('x') ORDER BY rowid", + "[null, null, null, null, null, null]" + ); + }catch(Exception e){ + threw = true; + affirm( e.getMessage().matches(".*column index out of range") ); + } + affirm( threw ); + threw = false; /* Test fts5_columntotalsize() */ do_execsql_test(db, diff --git a/manifest b/manifest index 579bc6df6d..3a70cf068a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C WASM:\svarious\sbuild\scleanups\sand\sadd\sinitial\sinfrastructure\sfor\sa\sbuild\swhich\selides\sthe\soo1\sAPI\sand\sits\sdependents\s(worker1\sand\spromiser).\sSidebar:\san\sattempt\swas\smade\sto\smove\sgeneration\sof\sthe\sbuild\srules\sto\san\sexternal\sscript,\sbut\sthe\smixed-mode\smake/script\swas\seven\sless\slegible\sthan\sthe\s$(eval)\sindirection\sgoing\son\sin\sthe\smakefile. -D 2024-01-01T05:58:47.485 +C JNI:\smove\sthe\sByteBuffer-using\sAPIs\sfrom\spublic\sto\spackage\svisibility\sfor\sthe\stime\sbeing\sbecause\sthey\shave\sUB-inducing\spossibilities\swhich\sneed\sto\sbe\sworked\sout.\sUpdate\stest\scode\sto\saccount\sfor\sa\schange\sin\scustom\sFTS5\scolumntext()\simpls. +D 2024-01-01T06:58:32.507 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -262,7 +262,7 @@ F ext/jni/src/org/sqlite/jni/capi/AggregateFunction.java 0b72cdff61533b564d65b63 F ext/jni/src/org/sqlite/jni/capi/AuthorizerCallback.java c045a5b47e02bb5f1af91973814a905f12048c428a3504fbc5266d1c1be3de5a F ext/jni/src/org/sqlite/jni/capi/AutoExtensionCallback.java 74cc4998a73d6563542ecb90804a3c4f4e828cb4bd69e61226d1a51f4646e759 F ext/jni/src/org/sqlite/jni/capi/BusyHandlerCallback.java 7b8e19810c42b0ad21a04b5d8c804b32ee5905d137148703f16a75b612c380ca -F ext/jni/src/org/sqlite/jni/capi/CApi.java d428a1fd3b827f01c55d10d21ff35e33e7dac9e8a1d92a8b5c7d7255e67407d8 +F ext/jni/src/org/sqlite/jni/capi/CApi.java 27bbd944ea8c147afd25b93f17dc397f3627611ebe2878944a32ffeffc98e99e F ext/jni/src/org/sqlite/jni/capi/CallbackProxy.java 57e2d275dcebe690b1fc1f3d34eb96879b2d7039bce30b563aee547bf45d8a8b F ext/jni/src/org/sqlite/jni/capi/CollationCallback.java e29bcfc540fdd343e2f5cca4d27235113f2886acb13380686756d5cabdfd065a F ext/jni/src/org/sqlite/jni/capi/CollationNeededCallback.java 5bfa226a8e7a92e804fd52d6e42b4c7b875fa7a94f8e2c330af8cc244a8920ab @@ -298,7 +298,7 @@ F ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java 338637e6e5a2cc385d962b220f3c1 F ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java 7da0fbb5728f7c056a43e6407f13dd0c7c9c445221267786a109b987f5fc8a9d F ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java 28045042d593a1f1b9b80d54ec77cbf1d8a1bc95e442eceefa9a3a6f56600b0e F ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java 3c8f677ffb85b8782f865d6fcbc16200b3375d0e3c29ed541a494fde3011bf49 -F ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java eaee4d641229a098eb704b96a45c9a23c6514dc39009d3611e265bab33834deb +F ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java 51e16bf9050af7cb246d17d6a19c001cfc916bf20f425c96625aaccaf74688e8 F ext/jni/src/org/sqlite/jni/fts5/XTokenizeCallback.java 1efd1220ea328a32f2d2a1b16c735864159e929480f71daad4de9d5944839167 F ext/jni/src/org/sqlite/jni/fts5/fts5_api.java a8e88c3783d21cec51b0748568a96653fead88f8f4953376178d9c7385b197ea F ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java 9e2b954d210d572552b28aca523b272fae14bd41e318921b22f65b728d5bf978 @@ -2156,8 +2156,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 99d11e6d0ae687ff6bac5119027f7b04d5e7185214e79cf8c56289cfa809b0f9 -R f12f6c5bbcd045460cf7bd0ad6d9cb62 +P 563d313163c02b398ae85b7c2ed231019a14e006726f09a7c1f294a58bf4363f +R 58350c999f119bc20e49e20150798450 U stephan -Z 65fba1a0552f62ac5813e31c03da0bea +Z a9b067fc18aa3982ca71d8b9d5540ad9 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 99bdacd567..5a0f386979 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -563d313163c02b398ae85b7c2ed231019a14e006726f09a7c1f294a58bf4363f \ No newline at end of file +dc501275fcfab3ad9b6ebbadf7588b225a9dd07a0abac5be83d96f15bfba99e9 \ No newline at end of file