diff options
-rw-r--r-- | libbb/read_package_field.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/libbb/read_package_field.c b/libbb/read_package_field.c index 246285f8e..3715230fe 100644 --- a/libbb/read_package_field.c +++ b/libbb/read_package_field.c | |||
@@ -7,24 +7,21 @@ | |||
7 | */ | 7 | */ |
8 | extern char *read_package_field(const char *package_buffer) | 8 | extern char *read_package_field(const char *package_buffer) |
9 | { | 9 | { |
10 | char *field = NULL; | ||
11 | int field_length = 0; | 10 | int field_length = 0; |
12 | int buffer_length = 0; | 11 | int buffer_length = 0; |
13 | 12 | ||
13 | if (package_buffer == NULL) { | ||
14 | return(NULL); | ||
15 | } | ||
14 | buffer_length = strlen(package_buffer); | 16 | buffer_length = strlen(package_buffer); |
15 | 17 | field_length = strcspn(package_buffer, "\n"); | |
16 | while ((field = strchr(&package_buffer[field_length], '\n')) != NULL) { | 18 | while (field_length < buffer_length) { |
17 | field_length = buffer_length - strlen(field); | ||
18 | if (package_buffer[field_length + 1] != ' ') { | 19 | if (package_buffer[field_length + 1] != ' ') { |
19 | break; | 20 | return(xstrndup(package_buffer, field_length)); |
20 | } else { | 21 | } |
21 | field_length++; | 22 | field_length++; |
22 | } | 23 | field_length += strcspn(&package_buffer[field_length], "\n"); |
23 | } | ||
24 | if (field_length == 0) { | ||
25 | return(NULL); | ||
26 | } else { | ||
27 | return(xstrndup(package_buffer, field_length)); | ||
28 | } | 24 | } |
25 | return(xstrdup(package_buffer)); | ||
29 | } | 26 | } |
30 | 27 | ||