[aur-dev] [PATCH] pkgsubmit: count actual subdirectories

Lukas Fleischer archlinux at cryptocrack.de
Sun Mar 18 08:01:59 EDT 2012


On Sat, Mar 17, 2012 at 10:35:49PM -0400, Dave Reisner wrote:
> Rather than relying on a regex, detect directories in the uploaded
> tarball and count the slashes. This avoids problems with bsdtar
> inserting PaxHeader attributes into the archive which look something
> like the following to Archive_Tar:
> 
>   PaxHeader/xcursor-protozoa
>   xcursor-protozoa/
>   xcursor-protozoa/PaxHeader/PKGBUILD
>   xcursor-protozoa/PKGBUILD
> 
> This only occurs on certain filesystems (e.g. jfs), but the tarball is
> by no means invalid. When extracted, it will only contain the PKGBUILD
> within a single subdirectory.
> 
> Signed-off-by: Dave Reisner <dreisner at archlinux.org>
> ---
>  web/html/pkgsubmit.php |    9 +++------
>  1 file changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
> index 75a4b69..5f5ba30 100644
> --- a/web/html/pkgsubmit.php
> +++ b/web/html/pkgsubmit.php
> @@ -63,16 +63,13 @@ if ($uid):
>  
>  			# Extract PKGBUILD into a string
>  			$pkgbuild_raw = '';
> -			$dircount = 0;
>  			foreach ($tar->listContent() as $tar_file) {
>  				if (preg_match('/^[^\/]+\/PKGBUILD$/', $tar_file['filename'])) {
>  					$pkgbuild_raw = $tar->extractInString($tar_file['filename']);
>  				}
> -				elseif (preg_match('/^[^\/]+\/$/', $tar_file['filename'])) {
> -					if (++$dircount > 1) {
> -						$error = __("Error - source tarball may not contain more than one directory.");
> -						break;
> -					}
> +				elseif ($tar_file['filetype'] == 5 && count(explode(',', $tar_file['filename'])) > 1) {

We don't check for nested subdirectories here, that is done further
below (check the last elseif-block). I also doubt that this one is the
check that fails since we count the entries that have a trailing "/"
here and, looking at the listing in your commit message, there don't
seem to be more than one of these. You should probably change the logic
in the last elseif condition instead of here... 

Also, the "," delimiter in explode() seems a bit wrong? :)

> +					$error = __("Error - source tarball may not contain more than one directory.");
> +					break;
>  				}
>  				elseif (preg_match('/^[^\/]+$/', $tar_file['filename'])) {
>  					$error = __("Error - source tarball may not contain files outside a directory.");
> -- 
> 1.7.9.4


More information about the aur-dev mailing list