Fix T59065: Blender default keyset is deletable by user!

Previously, you could delete presets that were part of the blender
default install. Now we check if the preset file resides in the bundled
file paths. If so, prevent deletion of the preset.

Reviewed By: Campbell

Differential Revision: http://developer.blender.org/D4522
This commit is contained in:
Sebastian Parborg 2019-10-30 19:16:53 +01:00
parent ace7ec785d
commit b1b0e56a72
2 changed files with 28 additions and 0 deletions

@ -456,6 +456,27 @@ def preset_paths(subdir):
return dirs
def is_path_builtin(path):
"""
Returns True if the path in question in one of the built in paths used by blender.
:arg path: Path you want to check if it is in the built in settings directory
"""
search_path = _os.path.abspath(path)
user_path = resource_path('USER')
for res in ('SYSTEM', 'LOCAL'):
parent_path = resource_path(res)
if not parent_path or parent_path == user_path:
# Make sure that the current path is not empty string and that it is
# not the same as the user config path. IE "~/.config/blender" on linux
# This can happen on portable installs.
continue
if _os.path.samefile(_os.path.commonpath([parent_path]), _os.path.commonpath([parent_path, path])):
return True
return False
def smpte_from_seconds(time, fps=None, fps_base=None):
"""

@ -29,6 +29,8 @@ from bpy.props import (
StringProperty,
)
from bpy.utils import is_path_builtin
# For preset popover menu
WindowManager.preset_name = StringProperty(
name="Preset Name",
@ -190,6 +192,11 @@ class AddPresetBase:
if not filepath:
return {'CANCELLED'}
# Do not remove bundled presets
if is_path_builtin(filepath):
self.report({'WARNING'}, "You can't remove the default presets")
return {'CANCELLED'}
try:
if hasattr(self, "remove"):
self.remove(context, filepath)