summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Lees <adrian@aemulor.com>2005-09-01 20:29:59 +0000
committerAdrian Lees <adrian@aemulor.com>2005-09-01 20:29:59 +0000
commit4a372d76d1567be0c89efeeb7de58dbf741fdcd2 (patch)
treeec8d687666d0b347022576e5d9cf8d844b884a38
parentd66f9c2fbd371c44239c3de84b1207cdf85e8b5f (diff)
downloadnetsurf-4a372d76d1567be0c89efeeb7de58dbf741fdcd2.tar.gz
netsurf-4a372d76d1567be0c89efeeb7de58dbf741fdcd2.tar.bz2
[project @ 2005-09-01 20:29:59 by adrianl]
Tolerate incorrectly terminated and unterminated data xfer filenames svn path=/import/netsurf/; revision=1860
-rw-r--r--riscos/gui.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/riscos/gui.c b/riscos/gui.c
index 7cf4d35df..1d1845f03 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -218,6 +218,7 @@ static char *ro_gui_uri_file_parse(const char *file_name, char **uri_title);
static bool ro_gui_uri_file_parse_line(FILE *fp, char *b);
static char *ro_gui_url_file_parse(const char *file_name);
static char *ro_gui_ieurl_file_parse(const char *file_name);
+static void ro_msg_terminate_filename(wimp_full_message_data_xfer *message);
static void ro_msg_datasave(wimp_message *message);
static void ro_msg_datasave_ack(wimp_message *message);
static void ro_msg_dataopen(wimp_message *block);
@@ -1218,6 +1219,8 @@ void ro_gui_user_message(wimp_event_no event, wimp_message *message)
break;
case message_DATA_LOAD:
+ ro_msg_terminate_filename((wimp_full_message_data_xfer*)message);
+
if (event == wimp_USER_MESSAGE_ACKNOWLEDGE) {
#ifdef WITH_PRINT
if (print_current_window)
@@ -1354,6 +1357,26 @@ void ro_gui_user_message(wimp_event_no event, wimp_message *message)
/**
+ * Ensure that the filename in a data transfer message is NUL terminated
+ * (some applications, especially BASIC programs use CR)
+ *
+ * \param message message to be corrected
+ */
+
+void ro_msg_terminate_filename(wimp_full_message_data_xfer *message)
+{
+ const char *ep = (char*)message + message->size;
+ char *p = message->file_name;
+
+ if ((size_t)message->size >= sizeof(*message))
+ ep = (char*)message + sizeof(*message) - 1;
+
+ while (p < ep && *p >= ' ') p++;
+ *p = '\0';
+}
+
+
+/**
* Handle Message_DataLoad (file dragged in).
*/
@@ -1679,6 +1702,8 @@ void ro_msg_datasave(wimp_message *message)
{
wimp_full_message_data_xfer *dataxfer = (wimp_full_message_data_xfer*)message;
+ ro_msg_terminate_filename(dataxfer);
+
switch (dataxfer->file_type) {
case FILETYPE_ACORN_URI:
case FILETYPE_ANT_URL:
@@ -1718,6 +1743,8 @@ void ro_msg_datasave(wimp_message *message)
void ro_msg_datasave_ack(wimp_message *message)
{
+ ro_msg_terminate_filename((wimp_full_message_data_xfer*)message);
+
#ifdef WITH_PRINT
if (print_ack(message))
return;