Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP7:Update
wget.36153
0001-possibly-truncate-pathname-components.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-possibly-truncate-pathname-components.patch of Package wget.36153
--- wget-1.20.3/src/url.c 2019-04-01 20:11:12.000000000 +0200 +++ wget-1.20.3-new/src/url.c 2024-10-23 17:51:42.463169213 +0200 @@ -1463,6 +1463,7 @@ append_uri_pathel (const char *b, const { const char *p; int quoted, outlen; + int max_length; int mask; if (opt.restrict_files_os == restrict_unix) @@ -1503,6 +1504,18 @@ append_uri_pathel (const char *b, const string length. Each quoted char introduces two additional characters in the string, hence 2*quoted. */ outlen = (e - b) + (2 * quoted); +# ifdef WINDOWS + max_length = MAX_PATH; +# else + max_length = get_max_length(dest->base, dest->tail, _PC_NAME_MAX); +# endif + max_length -= CHOMP_BUFFER; + if (max_length > 0 && outlen > max_length) + { + logprintf (LOG_NOTQUIET, "The destination name is too long (%d), reducing to %d\n", outlen, max_length); + + outlen = max_length; + } GROW (dest, outlen); if (!quoted) @@ -1514,19 +1527,29 @@ append_uri_pathel (const char *b, const else { char *q = TAIL (dest); - for (p = b; p < e; p++) + int i; + + for (i = 0, p = b; p < e; p++) { if (!FILE_CHAR_TEST (*p, mask)) - *q++ = *p; - else + { + if (i == outlen) + break; + *q++ = *p; + i++; + } + else if (i + 3 > outlen) + break; + else { unsigned char ch = *p; *q++ = '%'; *q++ = XNUM_TO_DIGIT (ch >> 4); *q++ = XNUM_TO_DIGIT (ch & 0xf); + i += 3; } } - assert (q - TAIL (dest) == outlen); + assert (q - TAIL (dest) <= outlen); } /* Perform inline case transformation if required. */ @@ -1686,7 +1709,6 @@ url_file_name (const struct url *u, char const char *u_file; char *fname, *unique, *fname_len_check; const char *index_filename = "index.html"; /* The default index file is index.html */ - size_t max_length; fnres.base = NULL; fnres.size = 0; @@ -1780,41 +1802,8 @@ url_file_name (const struct url *u, char temp_fnres.size = 0; temp_fnres.tail = 0; append_string (fname, &temp_fnres); - xfree (fname); - - /* Check that the length of the file name is acceptable. */ -#ifdef WINDOWS - if (MAX_PATH > (fnres.tail + CHOMP_BUFFER + 2)) - { - max_length = MAX_PATH - (fnres.tail + CHOMP_BUFFER + 2); - /* FIXME: In Windows a filename is usually limited to 255 characters. - To really be accurate you could call GetVolumeInformation() to get - lpMaximumComponentLength - */ - if (max_length > 255) - { - max_length = 255; - } - } - else - { - max_length = 0; - } -#else - max_length = get_max_length (fnres.base, fnres.tail, _PC_NAME_MAX) - CHOMP_BUFFER; -#endif - if (max_length > 0 && strlen (temp_fnres.base) > max_length) - { - logprintf (LOG_NOTQUIET, "The name is too long, %lu chars total.\n", - (unsigned long) strlen (temp_fnres.base)); - logprintf (LOG_NOTQUIET, "Trying to shorten...\n"); - - /* Shorten the file name. */ - temp_fnres.base[max_length] = '\0'; - - logprintf (LOG_NOTQUIET, "New name is %s.\n", temp_fnres.base); - } + xfree (fname); xfree (fname_len_check); /* The filename has already been 'cleaned' by append_uri_pathel() above. So,
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