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
commitedbc66d68d12d5ea00b10cba0414ba07623404f2 (patch)
tree3bb34080a7e796780c8c7e8b13372c74a0152f89 /navit/layout.c
parenta6feb9143b95d1bf29dc211392dadfe9be2dd49c (diff)
downloadnavit-edbc66d68d12d5ea00b10cba0414ba07623404f2.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 ef6862459..818a6f8b6 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;
}