diff --git a/sqlcipher/build.gradle b/sqlcipher/build.gradle index 6a19af8..a9b6dcc 100644 --- a/sqlcipher/build.gradle +++ b/sqlcipher/build.gradle @@ -162,8 +162,9 @@ afterEvaluate { } signing { - required { isReleaseBuild() && gradle.taskGraph.hasTask("publish") } - sign publishing.publications.mavenJava + required { false } +// required { isReleaseBuild() && gradle.taskGraph.hasTask("publish") } +// sign publishing.publications.mavenJava } artifacts { diff --git a/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_android/DatabaseGeneralTest.java b/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_android/DatabaseGeneralTest.java index b043b35..b441a48 100644 --- a/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_android/DatabaseGeneralTest.java +++ b/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_android/DatabaseGeneralTest.java @@ -960,7 +960,7 @@ public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceT assertFalse(mDatabase.isOpen()); assertTrue(dbfile.exists()); try { - errorHandler.onCorruption(mDatabase); + errorHandler.onCorruption(mDatabase, ""); if(SQLiteDatabase.hasCodec()){ assertTrue(dbfile.exists()); } else { @@ -976,7 +976,7 @@ public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceT memoryDb.close(); assertFalse(memoryDb.isOpen()); try { - errorHandler.onCorruption(memoryDb); + errorHandler.onCorruption(memoryDb, ""); } catch (Exception e) { fail("unexpected"); } @@ -987,7 +987,7 @@ public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceT assertNotNull(dbObj); assertTrue(dbObj.isOpen()); try { - errorHandler.onCorruption(dbObj); + errorHandler.onCorruption(dbObj, ""); if(SQLiteDatabase.hasCodec()){ assertTrue(dbfile.exists()); } else{ @@ -1012,7 +1012,7 @@ public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceT assertTrue(dbObj.isOpen()); List> attachedDbs = dbObj.getAttachedDbs(); try { - errorHandler.onCorruption(dbObj); + errorHandler.onCorruption(dbObj, ""); if(SQLiteDatabase.hasCodec()){ assertTrue(dbfile.exists()); } else { @@ -1047,7 +1047,7 @@ public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceT assertTrue(dbObj.isOpen()); attachedDbs = dbObj.getAttachedDbs(); try { - errorHandler.onCorruption(dbObj); + errorHandler.onCorruption(dbObj, ""); if(SQLiteDatabase.hasCodec()){ assertTrue(dbfile.exists()); } else { diff --git a/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLCipherOpenHelperTest.java b/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLCipherOpenHelperTest.java index e03377a..d9777b8 100644 --- a/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLCipherOpenHelperTest.java +++ b/sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLCipherOpenHelperTest.java @@ -72,7 +72,7 @@ public class SQLCipherOpenHelperTest extends AndroidSQLCipherTestCase { private final String TAG = getClass().getSimpleName(); public SqlCipherOpenHelper(Context context) { - super(context, "test.db", "test", null, 1, 1, sqLiteDatabase -> Log.e(SQLCipherOpenHelperTest.this.TAG, "onCorruption()"), new SQLiteDatabaseHook() { + super(context, "test.db", "test", null, 1, 1, (sqLiteDatabase, message) -> Log.e(SQLCipherOpenHelperTest.this.TAG, "onCorruption()"), new SQLiteDatabaseHook() { @Override public void preKey(SQLiteConnection sqLiteConnection) { Log.d(SQLCipherOpenHelperTest.this.TAG, "preKey()"); diff --git a/sqlcipher/src/main/java/net/zetetic/database/DatabaseErrorHandler.java b/sqlcipher/src/main/java/net/zetetic/database/DatabaseErrorHandler.java index 276fc65..7c3e5d4 100644 --- a/sqlcipher/src/main/java/net/zetetic/database/DatabaseErrorHandler.java +++ b/sqlcipher/src/main/java/net/zetetic/database/DatabaseErrorHandler.java @@ -33,5 +33,5 @@ public interface DatabaseErrorHandler { * @param dbObj the {@link SQLiteDatabase} object representing the database on which corruption * is detected. */ - void onCorruption(SQLiteDatabase dbObj); + void onCorruption(SQLiteDatabase dbObj, String message); } diff --git a/sqlcipher/src/main/java/net/zetetic/database/DefaultDatabaseErrorHandler.java b/sqlcipher/src/main/java/net/zetetic/database/DefaultDatabaseErrorHandler.java index 7162000..5b19b21 100644 --- a/sqlcipher/src/main/java/net/zetetic/database/DefaultDatabaseErrorHandler.java +++ b/sqlcipher/src/main/java/net/zetetic/database/DefaultDatabaseErrorHandler.java @@ -55,7 +55,7 @@ public final class DefaultDatabaseErrorHandler implements DatabaseErrorHandler { * @param dbObj the {@link SQLiteDatabase} object representing the database on which corruption * is detected. */ - public void onCorruption(SQLiteDatabase dbObj) { + public void onCorruption(SQLiteDatabase dbObj, String message) { Log.e(TAG, "Corruption reported by sqlite on database: " + dbObj.getPath()); // If this is a SEE build, do not delete any database files. diff --git a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteDatabase.java b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteDatabase.java index a9cdf8b..96f756f 100644 --- a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteDatabase.java +++ b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteDatabase.java @@ -344,9 +344,9 @@ public final class SQLiteDatabase extends SQLiteClosable implements SupportSQLit /** * Sends a corruption message to the database error handler. */ - void onCorruption() { + void onCorruption(String message) { EventLog.writeEvent(EVENT_DB_CORRUPT, getLabel()); - mErrorHandler.onCorruption(this); + mErrorHandler.onCorruption(this, message); } /** @@ -1013,7 +1013,7 @@ public final class SQLiteDatabase extends SQLiteClosable implements SupportSQLit try { openInner(); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); openInner(); } } catch (SQLiteException ex) { diff --git a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteProgram.java b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteProgram.java index c0836a2..1ed3e81 100644 --- a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteProgram.java +++ b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteProgram.java @@ -113,8 +113,8 @@ public abstract class SQLiteProgram extends SQLiteClosable implements SupportSQL } /** @hide */ - protected final void onCorruption() { - mDatabase.onCorruption(); + protected final void onCorruption(String message) { + mDatabase.onCorruption(message); } /** diff --git a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteQuery.java b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteQuery.java index 15a77d7..ed904ca 100644 --- a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteQuery.java +++ b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteQuery.java @@ -68,7 +68,7 @@ public final class SQLiteQuery extends SQLiteProgram { mCancellationSignal); return numRows; } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } catch (SQLiteException ex) { Log.e(TAG, "exception: " + ex.getMessage() + "; query: " + getSql()); diff --git a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteStatement.java b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteStatement.java index 3a152e5..ff2dc09 100644 --- a/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteStatement.java +++ b/sqlcipher/src/main/java/net/zetetic/database/sqlcipher/SQLiteStatement.java @@ -49,7 +49,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit try { getSession().execute(getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); @@ -70,7 +70,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit return getSession().executeForChangedRowCount( getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); @@ -91,7 +91,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit return getSession().executeForChangedRowCountRaw( getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); @@ -113,7 +113,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit return getSession().executeForLastInsertedRowId( getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); @@ -134,7 +134,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit return getSession().executeForLong( getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); @@ -155,7 +155,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit return getSession().executeForString( getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); @@ -176,7 +176,7 @@ public final class SQLiteStatement extends SQLiteProgram implements SupportSQLit return getSession().executeForBlobFileDescriptor( getSql(), getBindArgs(), getConnectionFlags(), null); } catch (SQLiteDatabaseCorruptException ex) { - onCorruption(); + onCorruption(ex.getMessage()); throw ex; } finally { releaseReference(); diff --git a/sqlcipher/src/main/jni/sqlcipher/android_database_SQLiteCommon.cpp b/sqlcipher/src/main/jni/sqlcipher/android_database_SQLiteCommon.cpp index 0ec0f42..d5ad6db 100644 --- a/sqlcipher/src/main/jni/sqlcipher/android_database_SQLiteCommon.cpp +++ b/sqlcipher/src/main/jni/sqlcipher/android_database_SQLiteCommon.cpp @@ -124,8 +124,12 @@ void throw_sqlite3_exception(JNIEnv* env, int errcode, if (sqlite3Message) { char *zFullmsg = sqlite3_mprintf( - "%s (code %d)%s%s", sqlite3Message, errcode, - (message ? ": " : ""), (message ? message : "") + "FullCode: %d | ErrorCode: %d | ExtendedErrorCode: %d | Message: %s | ExtraMessage: %s", + errcode, + errcode & 0xff, + errcode >> 8, + sqlite3Message, + (message ? message : "null") ); jniThrowException(env, exceptionClass, zFullmsg); sqlite3_free(zFullmsg);