summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2010-07-15 22:34:03 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2010-07-15 22:34:03 +0000
commit37b0d01d32bc95a2189a65ce9b163077811bead2 (patch)
tree5dd06e2933da228ee755bb7466bf8e7d442cf717 /render
parent8940cc18b155c93c9cfc48c2367fb5c1753d632f (diff)
downloadnetsurf-37b0d01d32bc95a2189a65ce9b163077811bead2.tar.gz
netsurf-37b0d01d32bc95a2189a65ce9b163077811bead2.tar.bz2
memory leak
svn path=/trunk/netsurf/; revision=10646
Diffstat (limited to 'render')
-rw-r--r--render/directory.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/render/directory.c b/render/directory.c
index b66e94dbc..602d979db 100644
--- a/render/directory.c
+++ b/render/directory.c
@@ -176,29 +176,13 @@ bool dirlist_generate_hide_columns(int flags, char *buffer, int buffer_length)
bool dirlist_generate_title(char *title, char *buffer, int buffer_length)
{
- int error = 0;
- int index_title_length = strlen(title) +
- strlen(messages_get("FileIndex"));
- char *index_title = malloc(index_title_length);
-
- if(index_title == NULL)
- /* Title buffer allocation error */
- return false;
-
- error = snprintf(index_title, index_title_length,
- messages_get("FileIndex"),
- title);
- if (error < 0 || error >= index_title_length)
- /* Error or buffer too small */
- return false;
-
- error = snprintf(buffer, buffer_length,
+ int error = snprintf(buffer, buffer_length,
"</style>\n"
"<title>%s</title>\n"
"</head>\n"
"<body>\n"
"<h1>%s</h1>\n",
- index_title, index_title);
+ title, title);
if (error < 0 || error >= buffer_length)
/* Error or buffer too small */
return false;
@@ -439,6 +423,7 @@ bool directory_create(struct content *c, const struct http_parameter *params) {
}
bool directory_convert(struct content *c) {
+ int error = 0;
char *path;
DIR *parent;
struct dirent *entry;
@@ -457,6 +442,8 @@ bool directory_convert(struct content *c) {
char modtime[100];
long long filesize;
bool extendedinfo, evenrow = false;
+ char *index_title;
+ int index_title_length;
/* Get directory path from URL */
path = url_to_path(content__get_url(c));
@@ -497,9 +484,32 @@ bool directory_convert(struct content *c) {
binding_parse_chunk(c->data.html.parser_binding,
(uint8_t *) buffer, strlen(buffer));
+ /* Construct a localised title string */
+ index_title_length = strlen(nice_path) +
+ strlen(messages_get("FileIndex"));
+ index_title = malloc(index_title_length);
+
+ if(index_title == NULL) {
+ msg_data.error = messages_get("NoMemory");
+ content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
+ return false;
+ }
+
+ snprintf(index_title, index_title_length,
+ messages_get("FileIndex"),
+ nice_path);
+ if (error < 0 || error >= index_title_length) {
+ /* Error or buffer too small */
+ msg_data.error = messages_get("NoMemory");
+ content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
+ free(index_title);
+ return false;
+ }
+
/* Print document title and heading */
- dirlist_generate_title(nice_path, buffer, MAX_LENGTH);
+ dirlist_generate_title(index_title, buffer, MAX_LENGTH);
free(nice_path);
+ free(index_title);
binding_parse_chunk(c->data.html.parser_binding,
(uint8_t *) buffer, strlen(buffer));