summaryrefslogtreecommitdiff
path: root/navit/layout.c
diff options
context:
space:
mode:
authorsleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-08-22 21:58:47 +0000
committersleske <sleske@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-08-22 21:58:47 +0000
commit6fe3e08e5bb1babc51122ece8cf9e9dd162431a3 (patch)
tree3bb34080a7e796780c8c7e8b13372c74a0152f89 /navit/layout.c
parent09c3f1734a5219b7bb059c10751287c081ef0b30 (diff)
downloadnavit-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.c12
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;
}