From 5666170c1e9a45c4ef72d9327dfbf859bf174b1f Mon Sep 17 00:00:00 2001 From: Vasu Nori Date: Tue, 22 Jun 2010 12:22:31 -0700 Subject: [PATCH] when corruption occurs, not clsing the db is casuing stack overflow due to a bug in DefaultDatabaseErrorHandler, if the corruption is so bad that the list of attached databases can't even be retrieved, then database is not closed in DefaultDatabaseErrorHandler, this causes the corrupted file to remain on disk. this causes corruption detection to occur forever until the stack overflows. Change-Id: I9896bee220231cbde0b1620ad0a617420424967c --- .../java/android/database/DefaultDatabaseErrorHandler.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/database/DefaultDatabaseErrorHandler.java b/core/java/android/database/DefaultDatabaseErrorHandler.java index efea3a685f504..3619e487256fd 100644 --- a/core/java/android/database/DefaultDatabaseErrorHandler.java +++ b/core/java/android/database/DefaultDatabaseErrorHandler.java @@ -57,6 +57,10 @@ public final class DefaultDatabaseErrorHandler implements DatabaseErrorHandler { // before that, get the attached database list first. try { attachedDbs = dbObj.getAttachedDbs(); + } catch (SQLiteException e) { + /* ignore */ + } + try { dbObj.close(); } catch (SQLiteException e) { /* ignore */ @@ -83,7 +87,8 @@ public final class DefaultDatabaseErrorHandler implements DatabaseErrorHandler { try { new File(fileName).delete(); } catch (Exception e) { - /* ignore */ + /* print warning and ignore exception */ + Log.w(TAG, "delete failed: " + e.getMessage()); } } }