aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorClaudio Saavedra <csaavedra@igalia.com>2012-04-27 21:11:00 +0800
committerClaudio Saavedra <csaavedra@igalia.com>2012-05-08 17:50:55 +0800
commit936e759536705b22218afaceff4d81d348021402 (patch)
treeeaee79600e8148ebb912239f0ea58161b9110513 /lib
parentbb10c338f3acb2dbdfe7405e7305f928df636f42 (diff)
downloadgsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.tar
gsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.tar.gz
gsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.tar.bz2
gsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.tar.lz
gsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.tar.xz
gsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.tar.zst
gsoc2013-epiphany-936e759536705b22218afaceff4d81d348021402.zip
ephy-history-service: trim query strings to avoid reaching sqlite limit
Sqlite limits the length of a LIKE pattern to 50000 bytes, therefore we need to make sure that longer strings are not used as queries. https://bugzilla.gnome.org/show_bug.cgi?id=674848
Diffstat (limited to 'lib')
-rw-r--r--lib/ephy-sqlite-statement.c12
-rw-r--r--lib/ephy-sqlite-statement.h2
-rw-r--r--lib/ephy-sqlite.h2
-rw-r--r--lib/history/ephy-history-service-hosts-table.c2
-rw-r--r--lib/history/ephy-history-service-urls-table.c2
-rw-r--r--lib/history/ephy-history-service-visits-table.c2
6 files changed, 19 insertions, 3 deletions
diff --git a/lib/ephy-sqlite-statement.c b/lib/ephy-sqlite-statement.c
index f95518a2a..6ff2454d9 100644
--- a/lib/ephy-sqlite-statement.c
+++ b/lib/ephy-sqlite-statement.c
@@ -267,3 +267,15 @@ ephy_sqlite_statement_get_column_as_blob (EphySQLiteStatement *self, int column)
{
return sqlite3_column_blob (self->priv->prepared_statement, column);
}
+
+char *
+ephy_sqlite_create_match_pattern (const char *match_string)
+{
+ char *string, *pattern;
+
+ string = g_strndup (match_string, EPHY_SQLITE_LIMIT_LIKE_PATTERN_LENGTH - 2);
+ pattern = g_strdup_printf ("%%%s%%", string);
+ g_free (string);
+
+ return pattern;
+}
diff --git a/lib/ephy-sqlite-statement.h b/lib/ephy-sqlite-statement.h
index c88947fab..abf6ac48f 100644
--- a/lib/ephy-sqlite-statement.h
+++ b/lib/ephy-sqlite-statement.h
@@ -68,6 +68,8 @@ double ephy_sqlite_statement_get_column_as_double (EphySQLite
const char* ephy_sqlite_statement_get_column_as_string (EphySQLiteStatement *statement, int column);
const void* ephy_sqlite_statement_get_column_as_blob (EphySQLiteStatement *statement, int column);
+char* ephy_sqlite_create_match_pattern (const char *match_string);
+
G_END_DECLS
#endif /* EPHY_SQLITE_STATEMENT_H */
diff --git a/lib/ephy-sqlite.h b/lib/ephy-sqlite.h
index dc151ec5f..e2ad297f5 100644
--- a/lib/ephy-sqlite.h
+++ b/lib/ephy-sqlite.h
@@ -29,6 +29,8 @@ typedef enum {
EPHY_SQLITE_COLUMN_TYPE_BLOB
} EphySQLiteColumnType;
+#define EPHY_SQLITE_LIMIT_LIKE_PATTERN_LENGTH 50000
+
G_END_DECLS
#endif /* EPHY_SQLITE_H */
diff --git a/lib/history/ephy-history-service-hosts-table.c b/lib/history/ephy-history-service-hosts-table.c
index 9312d739c..eb64e4651 100644
--- a/lib/history/ephy-history-service-hosts-table.c
+++ b/lib/history/ephy-history-service-hosts-table.c
@@ -318,7 +318,7 @@ ephy_history_service_find_host_rows (EphyHistoryService *self, EphyHistoryQuery
}
for (substring = query->substring_list; substring != NULL; substring = substring->next) {
int j = 4;
- char *string = g_strdup_printf ("%%%s%%", (char*)substring->data);
+ char *string = ephy_sqlite_create_match_pattern ((char*)substring->data);
while (j--)
if (ephy_sqlite_statement_bind_string (statement, i++, string, &error) == FALSE) {
g_error ("Could not build hosts table query statement: %s", error->message);
diff --git a/lib/history/ephy-history-service-urls-table.c b/lib/history/ephy-history-service-urls-table.c
index 9bcb5f62b..1e0a9c136 100644
--- a/lib/history/ephy-history-service-urls-table.c
+++ b/lib/history/ephy-history-service-urls-table.c
@@ -311,7 +311,7 @@ ephy_history_service_find_url_rows (EphyHistoryService *self, EphyHistoryQuery *
}
}
for (substring = query->substring_list; substring != NULL; substring = substring->next) {
- char *string = g_strdup_printf ("%%%s%%", (char*)substring->data);
+ char *string = ephy_sqlite_create_match_pattern ((char*)substring->data);
if (ephy_sqlite_statement_bind_string (statement, i++, string, &error) == FALSE) {
g_error ("Could not build urls table query statement: %s", error->message);
g_error_free (error);
diff --git a/lib/history/ephy-history-service-visits-table.c b/lib/history/ephy-history-service-visits-table.c
index 5b88b0f4c..d4801754b 100644
--- a/lib/history/ephy-history-service-visits-table.c
+++ b/lib/history/ephy-history-service-visits-table.c
@@ -182,7 +182,7 @@ ephy_history_service_find_visit_rows (EphyHistoryService *self, EphyHistoryQuery
}
}
for (substring = query->substring_list; substring != NULL; substring = substring->next) {
- char *string = g_strdup_printf ("%%%s%%", (char*)substring->data);
+ char *string = ephy_sqlite_create_match_pattern ((char*)substring->data);
if (ephy_sqlite_statement_bind_string (statement, i++, string, &error) == FALSE) {
g_error ("Could not build urls table query statement: %s", error->message);
g_error_free (error);