Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
4.0.1
-
None
-
None
Description
When trying to apply "protection" to an async node-creation with
CreateOption.doProtected, the protection is undermined because the node is created with protectionId = null.
The AsyncCreateBuilderImpl does pass doProtected = true to the CreateBuilderImpl constructor. However, this constructor (incorrectly?) assigns protectedId = null, resulting in a node-prefix of _c_null- (because getProtectedPrefix does not validate that the provided protectedId is non-null). This entirely undermines the effectiveness of the protection.
public CreateBuilderImpl(CuratorFrameworkImpl client, CreateMode createMode, Backgrounding backgrounding, boolean createParentsIfNeeded, boolean createParentsAsContainers, boolean doProtected, boolean compress, boolean setDataIfExists, List<ACL> aclList, Stat storingStat, long ttl) { this.client = client; this.createMode = createMode; this.backgrounding = backgrounding; this.createParentsIfNeeded = createParentsIfNeeded; this.createParentsAsContainers = createParentsAsContainers; this.doProtected = doProtected; this.compress = compress; this.setDataIfExists = setDataIfExists; protectedId = null; // *** incorrect if doProtected?! *** this.acling = new ACLing(client.getAclProvider(), aclList); this.storingStat = storingStat; this.ttl = ttl; }
It looks to me as if that constructor should be assigning protectedId if doProtected is true.
I wonder if the doProtected field should just be eliminated in favor a method that checks protectedId != null, to avoid this redundant encoding of intent?
Attachments
Issue Links
- links to