Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.3:Staging:A
libarchive
CVE-2015-8921.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File CVE-2015-8921.patch of Package libarchive
commit 1cbc76faffb79a99c6009a1816736f73b4a3632a Author: Tim Kientzle <kientzle@acm.org> Date: Sat Feb 7 12:59:39 2015 -0800 Issue 404: Read past end of string parsing fflags Index: libarchive-3.1.2/libarchive/archive_entry.c =================================================================== --- libarchive-3.1.2.orig/libarchive/archive_entry.c +++ libarchive-3.1.2/libarchive/archive_entry.c @@ -121,15 +121,6 @@ static const wchar_t *ae_wcstofflags(con static const char *ae_strtofflags(const char *stringp, unsigned long *setp, unsigned long *clrp); -#ifndef HAVE_WCSCPY -static wchar_t * wcscpy(wchar_t *s1, const wchar_t *s2) -{ - wchar_t *dest = s1; - while ((*s1 = *s2) != L'\0') - ++s1, ++s2; - return dest; -} -#endif #ifndef HAVE_WCSLEN static size_t wcslen(const wchar_t *s) { @@ -1593,14 +1584,17 @@ ae_strtofflags(const char *s, unsigned l while (*end != '\0' && *end != '\t' && *end != ' ' && *end != ',') end++; + size_t length = end - start; for (flag = flags; flag->name != NULL; flag++) { - if (memcmp(start, flag->name, end - start) == 0) { + size_t flag_length = strlen(flag->name); + if (length == flag_length + && memcmp(start, flag->name, length) == 0) { /* Matched "noXXXX", so reverse the sense. */ clear |= flag->set; set |= flag->clear; break; - } else if (memcmp(start, flag->name + 2, end - start) - == 0) { + } else if (length == flag_length - 2 + && memcmp(start, flag->name + 2, length) == 0) { /* Matched "XXXX", so don't reverse. */ set |= flag->set; clear |= flag->clear; @@ -1657,14 +1651,17 @@ ae_wcstofflags(const wchar_t *s, unsigne while (*end != L'\0' && *end != L'\t' && *end != L' ' && *end != L',') end++; + size_t length = end - start; for (flag = flags; flag->wname != NULL; flag++) { - if (wmemcmp(start, flag->wname, end - start) == 0) { + size_t flag_length = wcslen(flag->wname); + if (length == flag_length + && wmemcmp(start, flag->wname, length) == 0) { /* Matched "noXXXX", so reverse the sense. */ clear |= flag->set; set |= flag->clear; break; - } else if (wmemcmp(start, flag->wname + 2, end - start) - == 0) { + } else if (length == flag_length - 2 + && wmemcmp(start, flag->wname + 2, length) == 0) { /* Matched "XXXX", so don't reverse. */ set |= flag->set; clear |= flag->clear;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor