Reviewed by Maciej
authorbeidson <beidson@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Aug 2006 07:29:45 +0000 (07:29 +0000)
committerbeidson <beidson@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Aug 2006 07:29:45 +0000 (07:29 +0000)
        Added escapeSQLString() - a helper to escape strings to be used in textual SQL queries

        * WebCore.xcodeproj/project.pbxproj: Reordered some files
        * loader/icon/IconDataCache.cpp: Use the new escapeSQLString()
        (WebCore::IconDataCache::writeToDatabase):
        * loader/icon/IconDatabase.cpp: Use the new escapeSQLString() throughout
        (WebCore::IconDatabase::retainIconURL):
        (WebCore::IconDatabase::releaseIconURL):
        (WebCore::IconDatabase::forgetIconForIconURLFromDatabase):
        (WebCore::IconDatabase::establishIconIDForIconURL):
        (WebCore::imageDataForIconURLQuery):
        (WebCore::timeStampForIconURLQuery):
        (WebCore::iconURLForPageURLQuery):
        (WebCore::forgetPageURLQuery):
        (WebCore::setIconIDForPageURLQuery):
        (WebCore::getIconIDForIconURLQuery):
        (WebCore::addIconForIconURLQuery):
        (WebCore::hasIconForIconURLQuery):
        * loader/icon/SQLDatabase.h:
        (WebCore::escapeSQLString): Added

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15987 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/loader/icon/IconDataCache.cpp
WebCore/loader/icon/IconDatabase.cpp
WebCore/loader/icon/SQLDatabase.h

index b66c4feb1c16c47dfdd3bffa7b4592968a998a70..0b343e2866dddfbc84784c769646d234b8dc99da 100644 (file)
@@ -1,3 +1,28 @@
+2006-08-23  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Maciej
+
+        Added escapeSQLString() - a helper to escape strings to be used in textual SQL queries
+
+        * WebCore.xcodeproj/project.pbxproj: Reordered some files
+        * loader/icon/IconDataCache.cpp: Use the new escapeSQLString()
+        (WebCore::IconDataCache::writeToDatabase):
+        * loader/icon/IconDatabase.cpp: Use the new escapeSQLString() throughout
+        (WebCore::IconDatabase::retainIconURL):
+        (WebCore::IconDatabase::releaseIconURL):
+        (WebCore::IconDatabase::forgetIconForIconURLFromDatabase):
+        (WebCore::IconDatabase::establishIconIDForIconURL):
+        (WebCore::imageDataForIconURLQuery):
+        (WebCore::timeStampForIconURLQuery):
+        (WebCore::iconURLForPageURLQuery):
+        (WebCore::forgetPageURLQuery):
+        (WebCore::setIconIDForPageURLQuery):
+        (WebCore::getIconIDForIconURLQuery):
+        (WebCore::addIconForIconURLQuery):
+        (WebCore::hasIconForIconURLQuery):
+        * loader/icon/SQLDatabase.h:
+        (WebCore::escapeSQLString): Added
+
 2006-08-22  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Brady.
index c6054bf1043cf0734b46a2dfc81d27ff7e679fc0..3ce2fcd44b02445fe3016d3292b1c8acdde727bb 100644 (file)
                5126E6B60A2E3AEF005C29FA /* icon */ = {
                        isa = PBXGroup;
                        children = (
-                               5126E6B90A2E3B12005C29FA /* IconDatabase.cpp */,
                                657429140A9C2D0B00C52C97 /* IconDataCache.h */,
-                               657429150A9C2D0B00C52C97 /* SQLStatement.h */,
-                               657429160A9C2D0B00C52C97 /* SQLTransaction.h */,
-                               5126E6BA0A2E3B12005C29FA /* IconDatabase.h */,
                                5186C0550A9C21470034FE94 /* IconDataCache.cpp */,
+                               5126E6BA0A2E3B12005C29FA /* IconDatabase.h */,
+                               5126E6B90A2E3B12005C29FA /* IconDatabase.cpp */,
                                51D3EA130A3D24D300BADA35 /* SQLDatabase.cpp */,
                                51D3EA140A3D24D300BADA35 /* SQLDatabase.h */,
+                               657429150A9C2D0B00C52C97 /* SQLStatement.h */,
                                51D3EA150A3D24D300BADA35 /* SQLStatement.cpp */,
+                               657429160A9C2D0B00C52C97 /* SQLTransaction.h */,
                                51F11E140A48C2920034A24E /* SQLTransaction.cpp */,
                        );
                        path = icon;
index 69dcab06c0f57c171378ed0a4f08eacd6dff7429..df68e29bd6f438d169e180a159cc04476d8effad 100644 (file)
@@ -92,8 +92,7 @@ void IconDataCache::writeToDatabase(SQLDatabase& db)
         return;
     
     // First we create and prepare the SQLStatement    
-    String escapedIconURL = m_iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(m_iconURL);
     // The following statement works no matter what in version 5 of the DB schema because we have the table
     // replace any url entry with the new data if it already exists
     SQLStatement sql(db, "INSERT INTO Icon (url,stamp,data) VALUES ('" + escapedIconURL + "', ?, ?);");
index 089bd63009df70ba6d951d97d44b338c2969bf7f..b6f3b9f04f6fee55b07ded8460adb096b8015a47 100644 (file)
@@ -410,8 +410,7 @@ void IconDatabase::retainIconURL(const String& iconURL)
         // we only care *if* an icon is retained - not the full count.  This call to retainIconURL incremented the IconURL's
         // retain count from 0 to 1 therefore we may store it in the temporary table
         if (!m_initialPruningComplete) {
-            String escapedIconURL = iconURL;
-            escapedIconURL.replace('\'', "''");
+            String escapedIconURL = escapeSQLString(iconURL);
             if (!m_mainDB.executeCommand("INSERT INTO IconRetain VALUES ('" + escapedIconURL + "');"))
                 LOG_ERROR("Failed to record icon retention in temporary table for IconURL %s", iconURL.ascii().data());
         }
@@ -449,8 +448,7 @@ void IconDatabase::releaseIconURL(const String& iconURL)
     // we only care *if* an icon is retained - not the full count.  This call to retainIconURL decremented the IconURL's
     // retain count from 1 to 0 therefore we may remove it from the temporary table
     if (!m_initialPruningComplete) {
-        String escapedIconURL = iconURL;
-        escapedIconURL.replace('\'', "''");
+        String escapedIconURL = escapeSQLString(iconURL);
         if (!m_mainDB.executeCommand("DELETE FROM IconRetain WHERE url='" + escapedIconURL + "';"))
             LOG_ERROR("Failed to delete record of icon retention from temporary table for IconURL %s", iconURL.ascii().data());
     }
@@ -489,9 +487,6 @@ void IconDatabase::forgetIconForIconURLFromDatabase(const String& iconURL)
         LOG_ERROR("Attempting to forget icon for IconURL %s, though we don't have it in the database", iconURL.ascii().data());
         return;
     }
-        
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
     
     if (!m_currentDB->executeCommand(String::sprintf("DELETE FROM Icon WHERE Icon.iconID = %lli;", iconID)))
         LOG_ERROR("Unable to drop Icon for IconURL", iconURL.ascii().data()); 
@@ -605,8 +600,7 @@ void IconDatabase::setIconURLForPageURLInDatabase(const String& iconURL, const S
 
 int64_t IconDatabase::establishIconIDForIconURL(SQLDatabase& db, const String& iconURL, bool createIfNecessary)
 {
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(iconURL);
     
     // Get the iconID thats already in this database and return it - or return 0 if we're read-only
     int64_t iconID = getIconIDForIconURLQuery(db, iconURL);
@@ -748,53 +742,44 @@ static bool pageURLTableIsEmptyQuery(SQLDatabase& db)
 
 static void imageDataForIconURLQuery(SQLDatabase& db, const String& iconURL, Vector<unsigned char>& result)
 {
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(iconURL);
     SQLStatement(db, "SELECT Icon.data FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").getColumnBlobAsVector(0, result);
 }
 
 static int timeStampForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(iconURL);
     return SQLStatement(db, "SELECT Icon.stamp FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").getColumnInt(0);
 }
 
-
 static String iconURLForPageURLQuery(SQLDatabase& db, const String& pageURL)
 {
-    String escapedPageURL = pageURL;
-    escapedPageURL.replace('\'', "''");
+    String escapedPageURL = escapeSQLString(pageURL);
     return SQLStatement(db, "SELECT Icon.url FROM Icon, PageURL WHERE PageURL.url = '" + escapedPageURL + "' AND Icon.iconID = PageURL.iconID").getColumnText16(0);
 }
 
 static void forgetPageURLQuery(SQLDatabase& db, const String& pageURL)
 {
-    String escapedPageURL = pageURL;
-    escapedPageURL.replace('\'', "''");
-    
+    String escapedPageURL = escapeSQLString(pageURL);
     db.executeCommand("DELETE FROM PageURL WHERE url = '" + escapedPageURL + "';");
 }
 
 static void setIconIDForPageURLQuery(SQLDatabase& db, int64_t iconID, const String& pageURL)
 {
-    String escapedPageURL = pageURL;
-    escapedPageURL.replace('\'', "''");
+    String escapedPageURL = escapeSQLString(pageURL);
     if (!db.executeCommand("INSERT INTO PageURL (url, iconID) VALUES ('" + escapedPageURL + "', " + String::number(iconID) + ");"))
         LOG_ERROR("Failed to set iconid %lli for PageURL %s", iconID, pageURL.ascii().data());
 }
 
 static int64_t getIconIDForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(iconURL);
     return SQLStatement(db, "SELECT Icon.iconID FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").getColumnInt64(0);
 }
 
 static int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(iconURL);
     if (db.executeCommand("INSERT INTO Icon (url) VALUES ('" + escapedIconURL + "');"))
         return db.lastInsertRowID();
     return 0;
@@ -802,8 +787,7 @@ static int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
 
 static bool hasIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
-    String escapedIconURL = iconURL;
-    escapedIconURL.replace('\'', "''");
+    String escapedIconURL = escapeSQLString(iconURL);
     return SQLStatement(db, "SELECT Icon.iconID FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").returnsAtLeastOneResult();
 }
 
index ee516c8616ddb9703518c6fe725b53940925fb7c..4a7b1197a93485a66f968c9e39ead91188d4cb15 100644 (file)
@@ -70,7 +70,6 @@ public:
     
     int lastError() { return m_db ? sqlite3_errcode(m_db) : SQLITE_ERROR; }
     const char* lastErrorMsg() { return sqlite3_errmsg(m_db); }
-    
 private:
     String   m_path;
     sqlite3* m_db;
@@ -78,6 +77,13 @@ private:
     
 }; // class SQLDatabase
 
+inline String escapeSQLString(const String& s)
+{
+    String es = s;
+    es.replace('\'', "''");
+    return es;
+}
+
 } // namespace WebCore