summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2009-12-18 20:15:50 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2009-12-18 20:15:50 +0000
commitb75b2ae8bbeada1a364332596a759f4d0410a852 (patch)
tree22738b6fd641b63432b211ca5f04d1cbb20ef20b
parent46eaa6a0586dfafb4d0802c1583c86a6d155eaa3 (diff)
downloadnetsurf-b75b2ae8bbeada1a364332596a759f4d0410a852.tar.gz
netsurf-b75b2ae8bbeada1a364332596a759f4d0410a852.tar.bz2
Merge r9731:HEAD from branches/MarkieB/gtkmain to trunk.
svn path=/trunk/netsurf/; revision=9737
-rw-r--r--!NetSurf/Resources/de/Messages1
-rw-r--r--!NetSurf/Resources/en/Messages1
-rw-r--r--!NetSurf/Resources/fr/Messages1
-rwxr-xr-x!NetSurf/Resources/it/Messages1
-rw-r--r--!NetSurf/Resources/nl/Messages1
-rw-r--r--content/fetchcache.c3
-rw-r--r--desktop/search.c19
-rw-r--r--desktop/searchweb.c7
-rw-r--r--gtk/dialogs/gtk_options.c13
-rw-r--r--gtk/dialogs/gtk_source.c9
-rw-r--r--gtk/gtk_scaffolding.c38
-rw-r--r--gtk/gtk_tabs.c9
-rw-r--r--gtk/gtk_theme.c11
-rw-r--r--gtk/gtk_toolbar.c24
-rw-r--r--render/favicon.c2
-rw-r--r--utils/container.c34
16 files changed, 124 insertions, 50 deletions
diff --git a/!NetSurf/Resources/de/Messages b/!NetSurf/Resources/de/Messages
index 058273ee7..bf5a114b3 100644
--- a/!NetSurf/Resources/de/Messages
+++ b/!NetSurf/Resources/de/Messages
@@ -433,6 +433,7 @@ gtkFileError:File error: %s
gtkInfo:%s from %s is %s in size
gtkSave:Save file as...
gtkSourceSave:Save Source
+gtkSourceTabError:Error handling source data
gtkPlainSave:Save as text
gtkFullSave:Save webpage complete - select an empty directory
gtkUnknownHost:an unknown host
diff --git a/!NetSurf/Resources/en/Messages b/!NetSurf/Resources/en/Messages
index a787eeb3d..db233fe0c 100644
--- a/!NetSurf/Resources/en/Messages
+++ b/!NetSurf/Resources/en/Messages
@@ -434,6 +434,7 @@ gtkFileError:File error: %s
gtkInfo:%s from %s is %s in size
gtkSave:Save file as...
gtkSourceSave:Save source
+gtkSourceTabError:Error handling source data
gtkplainSave:Save plain text
gtkcompleteSave:Save webpage complete - select an empty directory
gtkSaveConfirm:File saved
diff --git a/!NetSurf/Resources/fr/Messages b/!NetSurf/Resources/fr/Messages
index c0fc0af5e..85a44f2e1 100644
--- a/!NetSurf/Resources/fr/Messages
+++ b/!NetSurf/Resources/fr/Messages
@@ -433,6 +433,7 @@ gtkFileError:File error: %s
gtkInfo:%s from %s is %s in size
gtkSave:Save file as...
gtkSourceSave:Save Source
+gtkSourceTabError:Error handling source data
gtkPlainSave:Save as text
gtkFullSave:Save webpage complete - select an empty directory
gtkUnknownHost:an unknown host
diff --git a/!NetSurf/Resources/it/Messages b/!NetSurf/Resources/it/Messages
index e824fbbe7..9c2e8367d 100755
--- a/!NetSurf/Resources/it/Messages
+++ b/!NetSurf/Resources/it/Messages
@@ -437,6 +437,7 @@ gtkFileError:Errore File: %s
gtkInfo:%s da %s รจ %s come dimensione
gtkSave:Salva file come...
gtkSourceSave:Salva sorgente
+gtkSourceTabError:Error handling source data
gtkPlainSave:Save as text
gtkFullSave:Save webpage complete - select an empty directory
gtkSaveConfirm:File salvato
diff --git a/!NetSurf/Resources/nl/Messages b/!NetSurf/Resources/nl/Messages
index 3916340d6..78b450590 100644
--- a/!NetSurf/Resources/nl/Messages
+++ b/!NetSurf/Resources/nl/Messages
@@ -433,6 +433,7 @@ gtkFileError:File error: %s
gtkInfo:%s from %s is %s in size
gtkSave:Save file as...
gtkSourceSave:Save Source
+gtkSourceTabError:Error handling source data
gtkPlainSave:Save as text
gtkFullSave:Save webpage complete - select an empty directory
gtkUnknownHost:an unknown host
diff --git a/content/fetchcache.c b/content/fetchcache.c
index 87732d49e..243d5c04b 100644
--- a/content/fetchcache.c
+++ b/content/fetchcache.c
@@ -752,7 +752,8 @@ void fetchcache_error_page(struct content *c, const char *error,
fetchcache_search_redirect(c, error);
free(host);
return;
- }
+ } else
+ free(host);
}
if ((length = snprintf(error_page, sizeof(error_page),
messages_get("ErrorPage"), error)) < 0)
diff --git a/desktop/search.c b/desktop/search.c
index 018f40674..ba472fd41 100644
--- a/desktop/search.c
+++ b/desktop/search.c
@@ -97,13 +97,22 @@ static void free_matches(struct search_context *context);
bool search_create_context(struct browser_window *bw,
struct search_callbacks *callbacks, void *p)
{
- struct search_context *context = malloc(sizeof(struct search_context));
- struct list_entry *search_head = malloc(sizeof(struct list_entry));
+ struct search_context *context;
+ struct list_entry *search_head;
- if ((context == NULL) || (search_head == NULL)) {
+ context = malloc(sizeof(struct search_context));
+ if (context == NULL) {
warn_user("NoMemory", 0);
return false;
}
+
+ search_head = malloc(sizeof(struct list_entry));
+ if (search_head == NULL) {
+ warn_user("NoMemory", 0);
+ free(context);
+ return false;
+ }
+
if (bw->search_context != NULL)
search_destroy_context(bw->search_context);
@@ -195,8 +204,10 @@ void search_step(struct search_context *context, search_flags_t flags,
void free_matches(struct search_context *context)
{
- struct list_entry *a = context->found->next;
+ struct list_entry *a;
struct list_entry *b;
+
+ a = context->found->next;
/* empty the list before clearing and deleting the
selections because the the clearing updates the
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index c6dfaa6df..2995627f6 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -77,9 +77,11 @@ bool search_is_url(const char *url)
if (url_normalize(url, &url2) != URL_FUNC_OK)
return false;
- if (url_host(url2, &host) != URL_FUNC_OK)
+ if (url_host(url2, &host) != URL_FUNC_OK) {
+ free(url2);
return false;
-
+ }
+ free(url2);
return true;
}
@@ -106,6 +108,7 @@ void search_web_provider_details(int reference)
if (ref++ == (int)reference)
break;
}
+ fclose(f);
if (current_search_provider.name != NULL)
free(current_search_provider.name);
current_search_provider.name = strdup(strtok(buf, "|"));
diff --git a/gtk/dialogs/gtk_options.c b/gtk/dialogs/gtk_options.c
index 00f73e97e..14467aa1b 100644
--- a/gtk/dialogs/gtk_options.c
+++ b/gtk/dialogs/gtk_options.c
@@ -476,6 +476,7 @@ static void nsgtk_options_theme_combo(void) {
gtk_combo_box_append_text(GTK_COMBO_BOX(combotheme), buf);
}
+ fclose(fp);
gtk_combo_box_set_active(GTK_COMBO_BOX(combotheme),
option_current_theme);
gtk_box_pack_start(box, combotheme, FALSE, TRUE, 0);
@@ -855,14 +856,17 @@ BUTTON_CLICKED(buttonaddtheme)
"gtkThemeFolderInstructions"),
0);
gtk_widget_destroy(GTK_WIDGET(fc));
- free(filename);
- free(themesfolder);
+ if (filename != NULL)
+ free(filename);
+ if (themesfolder != NULL)
+ free(themesfolder);
return FALSE;
} else {
directory++;
}
} else {
- free(filename);
+ if (filename != NULL)
+ free(filename);
filename = gtk_file_chooser_get_filename(
GTK_FILE_CHOOSER(fc));
if (strcmp(filename, themesfolder) == 0) {
@@ -877,7 +881,8 @@ BUTTON_CLICKED(buttonaddtheme)
}
gtk_widget_destroy(GTK_WIDGET(fc));
nsgtk_theme_add(directory);
- free(filename);
+ if (filename != NULL)
+ free(filename);
}
END_HANDLER
diff --git a/gtk/dialogs/gtk_source.c b/gtk/dialogs/gtk_source.c
index 361bcabd9..7ee3ef849 100644
--- a/gtk/dialogs/gtk_source.c
+++ b/gtk/dialogs/gtk_source.c
@@ -225,8 +225,17 @@ void nsgtk_source_tab_init(GtkWindow *parent, struct browser_window *bw)
gchar *filename;
char *fileurl;
gint handle = g_file_open_tmp("nsgtksourceXXXXXX", &filename, NULL);
+ if ((handle == -1) || (filename == NULL)) {
+ warn_user(messages_get("gtkSourceTabError"), 0);
+ return;
+ }
close (handle); /* in case it was binary mode */
FILE *f = fopen(filename, "w");
+ if (f == NULL) {
+ warn_user(messages_get("gtkSourceTabError"), 0);
+ g_free(filename);
+ return;
+ }
fprintf(f, "%s", ndata);
fclose(f);
free(ndata);
diff --git a/gtk/gtk_scaffolding.c b/gtk/gtk_scaffolding.c
index 01eb2d4e6..672a52f56 100644
--- a/gtk/gtk_scaffolding.c
+++ b/gtk/gtk_scaffolding.c
@@ -1205,31 +1205,32 @@ MULTIHANDLER(stop)
MULTIHANDLER(reload)
{
- struct browser_window *bw =
+ struct browser_window *bw =
gui_window_get_browser_window(g->top_level);
+ if (bw == NULL)
+ return TRUE;
/* clear potential search effects */
-
- if ((bw != NULL) && (bw->search_context != NULL))
+ if (bw->search_context != NULL)
search_destroy_context(bw->search_context);
nsgtk_search_set_forward_state(true, bw);
nsgtk_search_set_back_state(true, bw);
- browser_window_reload(bw, true);
+ browser_window_reload(bw, true);
- return TRUE;
+ return TRUE;
}
MULTIHANDLER(back)
{
- struct browser_window *bw =
+ struct browser_window *bw =
gui_window_get_browser_window(g->top_level);
- if (!history_back_available(bw->history))
+ if ((bw == NULL) || (!history_back_available(bw->history)))
return TRUE;
/* clear potential search effects */
- if ((bw != NULL) && (bw->search_context != NULL))
+ if (bw->search_context != NULL)
search_destroy_context(bw->search_context);
nsgtk_search_set_forward_state(true, bw);
nsgtk_search_set_back_state(true, bw);
@@ -1242,14 +1243,14 @@ MULTIHANDLER(back)
MULTIHANDLER(forward)
{
- struct browser_window *bw =
+ struct browser_window *bw =
gui_window_get_browser_window(g->top_level);
- if (!history_forward_available(bw->history))
+ if ((bw == NULL) || (!history_forward_available(bw->history)))
return TRUE;
/* clear potential search effects */
- if ((bw != NULL) && (bw->search_context != NULL))
+ if (bw->search_context != NULL)
search_destroy_context(bw->search_context);
nsgtk_search_set_forward_state(true, bw);
nsgtk_search_set_back_state(true, bw);
@@ -1464,6 +1465,7 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
g->search = malloc(sizeof(struct gtk_search));
if (g->search == NULL) {
warn_user("NoMemory", 0);
+ free(g);
return NULL;
}
@@ -1837,13 +1839,17 @@ void gui_window_start_throbber(struct gui_window* _g)
void gui_window_stop_throbber(struct gui_window* _g)
{
- struct gtk_scaffolding *g = nsgtk_get_scaffold(_g);
- g->buttons[STOP_BUTTON]->sensitivity = false;
- g->buttons[RELOAD_BUTTON]->sensitivity = true;
+ struct gtk_scaffolding *g = nsgtk_get_scaffold(_g);
+ if (g == NULL)
+ return;
nsgtk_window_update_back_forward(g);
schedule_remove(nsgtk_throb, g);
+ if (g->buttons[STOP_BUTTON] != NULL)
+ g->buttons[STOP_BUTTON]->sensitivity = false;
+ if (g->buttons[RELOAD_BUTTON] != NULL)
+ g->buttons[RELOAD_BUTTON]->sensitivity = true;
- if ((g == NULL) || (g->throbber == NULL) || (nsgtk_throbber == NULL) ||
+ if ((g->throbber == NULL) || (nsgtk_throbber == NULL) ||
(nsgtk_throbber->framedata == NULL) ||
(nsgtk_throbber->framedata[0] == NULL))
return;
@@ -2221,6 +2227,8 @@ void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget,
{
struct gtk_scaffolding *g = (struct gtk_scaffolding *)data;
int i = nsgtk_toolbar_get_id_from_widget(widget, g);
+ if (i == -1)
+ return;
if ((g->toolbarmem == alloc->x) ||
(g->buttons[i]->location <
g->buttons[HISTORY_BUTTON]->location))
diff --git a/gtk/gtk_tabs.c b/gtk/gtk_tabs.c
index f0e87bb79..286c388d8 100644
--- a/gtk/gtk_tabs.c
+++ b/gtk/gtk_tabs.c
@@ -193,13 +193,16 @@ void nsgtk_tab_page_changed(GtkNotebook *notebook, GtkNotebookPage *page,
GtkWidget *window = gtk_notebook_get_nth_page(notebook, page_num);
struct gui_window *gw = g_object_get_data(G_OBJECT(window),
"gui_window");
+ if (gw == NULL)
+ return;
struct browser_window *bw = gui_window_get_browser_window(gw);
- if ((bw != NULL) && (bw->search_context != NULL))
+ if (bw == NULL)
+ return;
+ if (bw->search_context != NULL)
search_destroy_context(bw->search_context);
nsgtk_search_set_forward_state(true, bw);
nsgtk_search_set_back_state(true, bw);
- if (gw)
- nsgtk_scaffolding_set_top_level(gw);
+ nsgtk_scaffolding_set_top_level(gw);
}
void nsgtk_tab_close_current(GtkNotebook *notebook)
diff --git a/gtk/gtk_theme.c b/gtk/gtk_theme.c
index f215cbeea..f85ffa2e3 100644
--- a/gtk/gtk_theme.c
+++ b/gtk/gtk_theme.c
@@ -213,6 +213,7 @@ bool nsgtk_theme_verify(const char *themename)
+ 1);
if (filecontent == NULL) {
warn_user(messages_get("NoMemory"), 0);
+ fclose(fp);
return true;
}
strcpy(filecontent, "gtk default theme\n");
@@ -226,6 +227,7 @@ bool nsgtk_theme_verify(const char *themename)
if (testfile == NULL) {
warn_user(messages_get("NoMemory"), 0);
free(filecontent);
+ fclose(fp);
return false;
}
sprintf(testfile, "%sthemes/%s", res_dir_location,
@@ -381,8 +383,8 @@ struct nsgtk_theme *nsgtk_theme_load(GtkIconSize s)
return nsgtk_theme_default(s);
struct nsgtk_theme *theme = malloc(sizeof(struct nsgtk_theme));
- if (theme == NULL)
- return theme;
+ if (theme == NULL)
+ return theme;
if ((theme_cache_menu == NULL) || (theme_cache_toolbar == NULL))
nsgtk_theme_prepare();
@@ -390,8 +392,10 @@ struct nsgtk_theme *nsgtk_theme_load(GtkIconSize s)
/* load theme from cache */
struct nsgtk_theme_cache *cachetheme = (s == GTK_ICON_SIZE_MENU) ?
theme_cache_menu : theme_cache_toolbar;
- if (cachetheme == NULL)
+ if (cachetheme == NULL) {
+ free(theme);
return NULL;
+ }
#define SET_BUTTON_IMAGE(p, q, r)\
if (p->image[q##_BUTTON] != NULL)\
@@ -731,6 +735,7 @@ bool theme_install_read(const char *data, unsigned long len)
if (handle == -1) {
warn_user(messages_get("gtkFileError"),
"temporary theme file");
+ return false;
}
ssize_t written = write(handle, data, len);
close(handle);
diff --git a/gtk/gtk_toolbar.c b/gtk/gtk_toolbar.c
index 20cfbd812..bde285d34 100644
--- a/gtk/gtk_toolbar.c
+++ b/gtk/gtk_toolbar.c
@@ -201,16 +201,20 @@ void nsgtk_toolbar_window_open(nsgtk_scaffolding *g)
}
glade_xml_signal_autoconnect(window->glade);
-#define GET_TOOLWIDGET(p, q, r, s) r->p = glade_xml_get_widget(r->s, #q);\
- if (r->p == NULL) {\
- warn_user(messages_get("NoMemory"), 0);\
- nsgtk_toolbar_cancel_clicked(NULL, g);\
- return;\
- }
-
- GET_TOOLWIDGET(window, toolbarwindow, window, glade)
- GET_TOOLWIDGET(widgetvbox, widgetvbox, window, glade)
-#undef GET_TOOLWIDGET
+ window->window = glade_xml_get_widget(window->glade, "toolbarwindow");
+ if (window->window == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
+ }
+ window->widgetvbox = glade_xml_get_widget(window->glade, "widgetvbox");
+ if (window->widgetvbox == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ nsgtk_toolbar_cancel_clicked(NULL, g);
+ free(theme);
+ return;
+ }
window->numberh = NSGTK_STORE_WIDTH; /* preset to width [in buttons] of */
/* store to cause creation of a new toolbar */
diff --git a/render/favicon.c b/render/favicon.c
index fdf6e25f1..cc75ca0cb 100644
--- a/render/favicon.c
+++ b/render/favicon.c
@@ -92,13 +92,13 @@ char *favicon_get_icon_ref(struct content *c, xmlNode *html)
url2 = NULL;
}
res = url_normalize(url, &url2);
+ free(url);
if (res != URL_FUNC_OK) {
url2 = NULL;
if (res == URL_FUNC_NOMEM)
goto no_memory;
continue;
}
- free(url);
}
}
diff --git a/utils/container.c b/utils/container.c
index 04d8da8d0..ff761093b 100644
--- a/utils/container.c
+++ b/utils/container.c
@@ -21,6 +21,8 @@
*
* gcc -I../ -DNSTHEME -o themetool container.c
*
+ * [needs a c99 compiler]
+ *
* then for instance to create a theme file called mythemefilename
* ./themetool --verbose --create -n"My theme name" mythemefilename\
* --author "Myname" /path/to/directory/containing/theme/files/
@@ -41,10 +43,15 @@
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/utils.h"
+
#ifdef WITH_MMAP
#include <sys/mman.h>
#endif
+#ifdef NSTHEME
+bool verbose_log = true;
+#endif
+
struct container_dirent {
unsigned char filename[64];
u_int32_t startoffset;
@@ -73,14 +80,21 @@ struct container_ctx {
inline static size_t container_filelen(FILE *fd)
{
- size_t o = ftell(fd);
- size_t a;
+ long o = ftell(fd);
+ long a;
fseek(fd, 0, SEEK_END);
a = ftell(fd);
fseek(fd, o, SEEK_SET);
-
- return a;
+ if (a == -1) {
+ LOG(("could not ascertain size of file in theme container; omitting"));
+ return 0;
+ }
+ if (((unsigned long) a) > SIZE_MAX) {
+ LOG(("overlarge file in theme container; possible truncation"));
+ return SIZE_MAX;
+ }
+ return (size_t) a;
}
static void container_add_to_dir(struct container_ctx *ctx,
@@ -88,9 +102,15 @@ static void container_add_to_dir(struct container_ctx *ctx,
const u_int32_t offset,
const u_int32_t length)
{
+ struct container_dirent *temp;
+ temp = realloc(ctx->directory, ctx->entries *
+ sizeof(struct container_dirent));
+ if (temp == NULL) {
+ printf("error adding entry for %s to theme container\n", entryname);
+ return;
+ }
ctx->entries += 1;
- ctx->directory = realloc(ctx->directory, ctx->entries *
- sizeof(struct container_dirent));
+ ctx->directory = temp;
strncpy((char *)ctx->directory[ctx->entries - 1].filename,
(char *)entryname, sizeof(ctx->directory[
@@ -503,7 +523,7 @@ static void extract_theme(const char *themefile, const char *dirname)
FILE *fh;
const unsigned char *e, *d;
char path[PATH_MAX];
- int state = 0;
+ int i, state = 0;
u_int32_t flen;