[augeas-devel] [PATCH] Fix segfault when branch in a union does not have a ktype

David Lutterkort lutter at redhat.com
Tue Dec 30 05:44:58 UTC 2008


* src/lens.c (lns_key_regexp): check for NULL ktype of branch
* tests/modules/pass_union_nokey.aug: test the fix

Bug reported by Robin Lee Powell <rlpowell at digitalkingdom.org>
---
 src/lens.c                         |   16 +++++++++-------
 tests/modules/pass_union_nokey.aug |    4 ++++
 2 files changed, 13 insertions(+), 7 deletions(-)
 create mode 100644 tests/modules/pass_union_nokey.aug

diff --git a/src/lens.c b/src/lens.c
index 0439e9a..faf29ee 100644
--- a/src/lens.c
+++ b/src/lens.c
@@ -582,13 +582,15 @@ static struct regexp *lns_key_regexp(struct lens *l, struct value **exn) {
                 struct regexp *r = lns_key_regexp(l->children[i], exn);
                 if (*exn != NULL)
                     return NULL;
-                if (k == NULL) {
-                    k = r;
-                } else {
-                    struct regexp *u = regexp_union(l->info, k, r);
-                    unref(k, regexp);
-                    unref(r, regexp);
-                    k = u;
+                if (r != NULL) {
+                    if (k == NULL) {
+                        k = r;
+                    } else {
+                        struct regexp *u = regexp_union(l->info, k, r);
+                        unref(k, regexp);
+                        unref(r, regexp);
+                        k = u;
+                    }
                 }
             }
             return k;
diff --git a/tests/modules/pass_union_nokey.aug b/tests/modules/pass_union_nokey.aug
new file mode 100644
index 0000000..084cf8c
--- /dev/null
+++ b/tests/modules/pass_union_nokey.aug
@@ -0,0 +1,4 @@
+module Pass_union_nokey =
+
+let lns = [ key /[a-z]+/ . store /[0-9]+/
+          | [ key /[a-z]+/ ] . del /[ ]+/ " " ]
-- 
1.6.0.4




More information about the augeas-devel mailing list