Index: patterns/patterns.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/patterns/patterns.module,v
retrieving revision 1.1.2.2.2.75
diff -u -p -r1.1.2.2.2.75 patterns.module
--- patterns/patterns.module	18 Aug 2009 08:51:51 -0000	1.1.2.2.2.75
+++ patterns/patterns.module	30 Aug 2009 14:34:21 -0000
@@ -1213,18 +1213,20 @@ function patterns_from_source($xml) {
 function _patterns_parse_tag($data, &$index = 0) {
   $pattern = array();
 
-  while ($current = $data[$index]) {
+  while (isset($data[$index]) && $current = $data[$index]) {
     $type = $current['type'];
 
-    foreach((array)$current['attributes'] as $key => $value) {
-      $current[strtolower($key)] = $value;
+    if (! empty($current['attributes'])) {
+      foreach((array)$current['attributes'] as $key => $value) {
+        $current[strtolower($key)] = $value;
+      }
     }
 
     $current['tag'] = strtolower($current['tag']);
 
     unset($current['type'], $current['level'], $current['attributes']);
 
-    if (!trim($current['value']) && $current['value'] != "0") {
+    if (isset($current['value']) && !trim($current['value']) && $current['value'] != "0") {
       unset($current['value']);
     }
 
@@ -1240,7 +1242,7 @@ function _patterns_parse_tag($data, &$in
         break;
       case 'complete':
         // In order to support more complex/non-standard features we can use serialized data
-        if ($current['attributes']['serialized']) {
+        if (!empty($current['attributes']['serialized'])) {
           $value = unserialize($current['value']);
 
           if (isset($value)) {
@@ -1903,6 +1905,10 @@ function _patterns_rearrange_data($data,
   $count=0;
 
   foreach($data as $key => $value) {
+    if (! isset($value['value'])) {
+      // Avoid 'undefined index' errors
+      $value['value'] = NULL;
+    }
     if ($value['value'] == 'false') {
       $value['value'] = false;
     }
