diff options
author | Richard Wilson <rjw@netsurf-browser.org> | 2005-04-05 17:19:58 +0000 |
---|---|---|
committer | Richard Wilson <rjw@netsurf-browser.org> | 2005-04-05 17:19:58 +0000 |
commit | 9acf6d31cfd9c3f21d8c42e6ceda1c65d74be05f (patch) | |
tree | bd9dc7b26e21b30d1e8a21c00792c202b7439cf6 /riscos | |
parent | 8e9561dc293e958fcce9873295acbd784512310f (diff) | |
download | netsurf-9acf6d31cfd9c3f21d8c42e6ceda1c65d74be05f.tar.gz netsurf-9acf6d31cfd9c3f21d8c42e6ceda1c65d74be05f.tar.bz2 |
[project @ 2005-04-05 17:19:58 by rjw]
Add sanity checks to Sprite file handling and simplify code.
svn path=/import/netsurf/; revision=1600
Diffstat (limited to 'riscos')
-rw-r--r-- | riscos/sprite.c | 33 | ||||
-rw-r--r-- | riscos/sprite.h | 3 |
2 files changed, 9 insertions, 27 deletions
diff --git a/riscos/sprite.c b/riscos/sprite.c index 837dedfbe..27bc4f8af 100644 --- a/riscos/sprite.c +++ b/riscos/sprite.c @@ -31,28 +31,6 @@ /** - * Create a new CONTENT_SPRITE. - * - * A new empty sprite area is allocated. - */ - -bool sprite_create(struct content *c, const char *params[]) -{ - union content_msg_data msg_data; - - c->data.sprite.data = malloc(4); - if (!c->data.sprite.data) { - msg_data.error = messages_get("NoMemory"); - content_broadcast(c, CONTENT_MSG_ERROR, msg_data); - warn_user("NoMemory", 0); - return false; - } - c->data.sprite.length = 4; - return true; -} - - -/** * Convert a CONTENT_SPRITE for display. * * No conversion is necessary. We merely read the sprite dimensions. @@ -68,6 +46,13 @@ bool sprite_convert(struct content *c, int width, int height) source_data = ((char *)c->source_data) - 4; osspriteop_area *area = (osspriteop_area*)source_data; c->data.sprite.data = area; + + /* check for bad data */ + if ((int)c->source_size + 4 != area->used) { + msg_data.error = messages_get("BadSprite"); + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + return false; + } error = xosspriteop_read_sprite_info(osspriteop_PTR, (osspriteop_area *)0x100, @@ -86,7 +71,7 @@ bool sprite_convert(struct content *c, int width, int height) c->title = malloc(100); if (c->title) snprintf(c->title, 100, messages_get("SpriteTitle"), c->width, - c->height, c->data.sprite.length); + c->height, c->source_size); c->status = CONTENT_STATUS_DONE; return true; } @@ -99,7 +84,7 @@ bool sprite_convert(struct content *c, int width, int height) void sprite_destroy(struct content *c) { /* do not free c->data.sprite.data at it is simply a pointer to - * 4 bytes before the c->data.source_data. */ + * 4 bytes beforec->source_data. */ free(c->title); } diff --git a/riscos/sprite.h b/riscos/sprite.h index 3824ace43..f360d2bb0 100644 --- a/riscos/sprite.h +++ b/riscos/sprite.h @@ -18,11 +18,8 @@ struct content; struct content_sprite_data { void *data; - unsigned long length; }; -bool sprite_create(struct content *c, const char *params[]); -bool sprite_process_data(struct content *c, char *data, unsigned int size); bool sprite_convert(struct content *c, int width, int height); void sprite_destroy(struct content *c); bool sprite_redraw(struct content *c, int x, int y, |