diff options
author | sleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-08-22 21:58:47 +0000 |
---|---|---|
committer | sleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-08-22 21:58:47 +0000 |
commit | 6fe3e08e5bb1babc51122ece8cf9e9dd162431a3 (patch) | |
tree | 3bb34080a7e796780c8c7e8b13372c74a0152f89 /navit/layout.c | |
parent | 09c3f1734a5219b7bb059c10751287c081ef0b30 (diff) | |
download | navit-svn-6fe3e08e5bb1babc51122ece8cf9e9dd162431a3.tar.gz |
Fix:core:Handle <layer> without name or with invalid ref=.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5590 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/layout.c')
-rw-r--r-- | navit/layout.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/navit/layout.c b/navit/layout.c index ef686245..818a6f8b 100644 --- a/navit/layout.c +++ b/navit/layout.c @@ -245,6 +245,10 @@ layer_set_attr_do(struct layer *l, struct attr *attr, int init) navit_object_unref((struct navit_object *)l->ref); l->ref=NULL; obj=(struct navit_object *)l->navit; + if (obj==NULL){ + dbg(0, "Invalid layer reference '%s': Only layers inside a layout can use references.\n", attr->u.str); + return 0; + } iter=obj->func->iter_new(obj); while (obj->func->get_attr(obj, attr_layer, &layer, iter)) { if (!strcmp(layer.u.layer->name, attr->u.str)) { @@ -252,6 +256,9 @@ layer_set_attr_do(struct layer *l, struct attr *attr, int init) break; } } + if (l->ref==NULL){ + dbg(0, "Ignoring reference to unknown layer '%s' in layer '%s'.\n", attr->u.str, l->name); + } obj->func->iter_destroy(iter); default: return 0; @@ -273,6 +280,11 @@ struct layer * layer_new(struct attr *parent, struct attr **attrs) for (;*attrs; attrs++) { layer_set_attr_do(l, *attrs, 1); } + if (l->name==NULL){ + dbg(0, "Ignoring layer without name.\n"); + g_free(l); + return NULL; + } return l; } |