Fix segfault while attempting to parse invalid package stream.
authorgraham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>
Wed, 18 Nov 2009 01:37:40 +0000 (01:37 +0000)
committergraham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>
Wed, 18 Nov 2009 01:37:40 +0000 (01:37 +0000)
Reported by John L. Chmielewski.

git-svn-id: http://opkg.googlecode.com/svn/trunk@331 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358

libopkg/pkg_parse.c

index 246705e8f2549ae2d2270489dcd7ff880ccaee31..a51a3e10d0ac1a583481a674261f4c9a12c8f2b8 100644 (file)
@@ -152,6 +152,7 @@ pkg_parse_line(pkg_t *pkg, const char *line, uint mask)
 {
        /* these flags are a bit hackish... */
        static int reading_conffiles = 0, reading_description = 0;
 {
        /* these flags are a bit hackish... */
        static int reading_conffiles = 0, reading_description = 0;
+       int ret = 0;
 
        switch (*line) {
        case 'A':
 
        switch (*line) {
        case 'A':
@@ -279,12 +280,14 @@ pkg_parse_line(pkg_t *pkg, const char *line, uint mask)
                        parse_conffiles(pkg, line);
                        goto dont_reset_flags;
                }
                        parse_conffiles(pkg, line);
                        goto dont_reset_flags;
                }
-               break;
 
 
+               /* FALLTHROUGH */
        default:
                /* For package lists, signifies end of package. */
        default:
                /* For package lists, signifies end of package. */
-               if(line_is_blank(line))
-                       return 1;
+               if(line_is_blank(line)) {
+                       ret = 1;
+                       break;
+               }
        }
 
        reading_description = 0;
        }
 
        reading_description = 0;
@@ -292,7 +295,7 @@ pkg_parse_line(pkg_t *pkg, const char *line, uint mask)
 
 dont_reset_flags:
 
 
 dont_reset_flags:
 
-       return 0;
+       return ret;
 }
 
 int
 }
 
 int