Tolerate fields with no data, e.g. "Depends: "
authorGlenn L McGrath <bug1@ihug.co.nz>
Sat, 14 Jul 2001 06:25:54 +0000 (06:25 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sat, 14 Jul 2001 06:25:54 +0000 (06:25 -0000)
archival/dpkg.c
dpkg.c

index ffe74670353a1692a60d7cfdb56d3aaea3dbf96b..189b0a89870d4d22f9f111baf26494e1c4faa46b 100644 (file)
@@ -517,10 +517,19 @@ unsigned int fill_package_struct(char *control_buffer)
                field_start += (field_length + 1);
 
                seperator_offset = strcspn(field, ":");
+               if (seperator_offset == 0) {
+                       free(field);
+                       continue;
+               }
                field_name = xstrndup(field, seperator_offset);
                field_value = field + seperator_offset + 1;
                field_value += strspn(field_value, " \n\t");
 
+               /* Should be able to replace this strlen with pointer arithmatic */
+               if (strlen(field_value) == 0) {
+                       goto fill_package_struct_cleanup; // Oh no, the dreaded goto statement !!
+               }
+
                if (strcmp(field_name, "Package") == 0) {
                        new_node->name = search_name_hashtable(field_value);
                }
@@ -551,6 +560,7 @@ unsigned int fill_package_struct(char *control_buffer)
                else if (strcmp(field_name, "Enhances") == 0) {
                        add_split_dependencies(new_node, field_value, EDGE_ENHANCES);
                }
+fill_package_struct_cleanup:
                free(field_name);
                free(field);
        }
diff --git a/dpkg.c b/dpkg.c
index ffe74670353a1692a60d7cfdb56d3aaea3dbf96b..189b0a89870d4d22f9f111baf26494e1c4faa46b 100644 (file)
--- a/dpkg.c
+++ b/dpkg.c
@@ -517,10 +517,19 @@ unsigned int fill_package_struct(char *control_buffer)
                field_start += (field_length + 1);
 
                seperator_offset = strcspn(field, ":");
+               if (seperator_offset == 0) {
+                       free(field);
+                       continue;
+               }
                field_name = xstrndup(field, seperator_offset);
                field_value = field + seperator_offset + 1;
                field_value += strspn(field_value, " \n\t");
 
+               /* Should be able to replace this strlen with pointer arithmatic */
+               if (strlen(field_value) == 0) {
+                       goto fill_package_struct_cleanup; // Oh no, the dreaded goto statement !!
+               }
+
                if (strcmp(field_name, "Package") == 0) {
                        new_node->name = search_name_hashtable(field_value);
                }
@@ -551,6 +560,7 @@ unsigned int fill_package_struct(char *control_buffer)
                else if (strcmp(field_name, "Enhances") == 0) {
                        add_split_dependencies(new_node, field_value, EDGE_ENHANCES);
                }
+fill_package_struct_cleanup:
                free(field_name);
                free(field);
        }