diff --git a/docs/fdroid.texi b/docs/fdroid.texi index f5798569..80d0abd6 100644 --- a/docs/fdroid.texi +++ b/docs/fdroid.texi @@ -840,14 +840,15 @@ which architecture or platform the apk is designed to run on. If specified, the package version code in the AndroidManifest.xml is replaced with the version code for the build. See also forceversion. -@item rm= -Specifies the relative path of a file to delete before the build is -done. The path is relative to the base of the build directory - i.e. -the root of the directory structure checked out from the source -respository - not necessarily the directory that contains +@item rm= +Specifies the relative paths of files or directories to delete before +the build is done. The paths are relative to the base of the build +directory - i.e. the root of the directory structure checked out from +the source respository - not necessarily the directory that contains AndroidManifest.xml. -Multiple files can be specified by separating they with ';'. +Multiple files/directories can be specified by separating them with ';'. +Directories will be recursively deleted. @item fixtrans=yes Modifies any instances of string resources that use multiple diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 9732ceb0..ce9eb594 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -1424,12 +1424,14 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, sdk_path, path]) != 0: raise BuildException("Failed to amend manifest") - # Delete unwanted file... + # Delete unwanted files... if 'rm' in build: for part in build['rm'].split(';'): dest = os.path.join(build_dir, part.strip()) + if not os.path.realpath(dest).startswith(os.path.realpath(root_dir)): + raise BuildException("rm is outside build root") if os.path.exists(dest): - os.remove(dest) + subprocess.call('rm -rf ' + dest, shell=True) # Fix apostrophes translation files if necessary... if build.get('fixapos', 'no') == 'yes':