mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-20 17:41:37 +00:00
rbx_dom_lua rojo-rbx/rbx-dom@440f3723 (attribute validation) (#809)
Brings over some changes to rbx_dom_lua to validate attribute names before calling `Instance:SetAttribute`. This should prevent Rojo from falling over when it attempts to sync an attribute with an invalid name.
This commit is contained in:
parent
f4252c3e97
commit
9f13bca6b8
2 changed files with 20 additions and 3 deletions
|
|
@ -7,11 +7,13 @@
|
||||||
This ensures that the script editor reflects any changes Rojo makes to a script while it is open in the script editor.
|
This ensures that the script editor reflects any changes Rojo makes to a script while it is open in the script editor.
|
||||||
|
|
||||||
* Fixed issues when handling `SecurityCapabilities` values ([#803], [#807])
|
* Fixed issues when handling `SecurityCapabilities` values ([#803], [#807])
|
||||||
|
* Fixed Rojo plugin erroring out when attempting to sync attributes with invalid names ([#809])
|
||||||
|
|
||||||
[#800]: https://github.com/rojo-rbx/rojo/pull/800
|
[#800]: https://github.com/rojo-rbx/rojo/pull/800
|
||||||
[#801]: https://github.com/rojo-rbx/rojo/pull/801
|
[#801]: https://github.com/rojo-rbx/rojo/pull/801
|
||||||
[#803]: https://github.com/rojo-rbx/rojo/pull/803
|
[#803]: https://github.com/rojo-rbx/rojo/pull/803
|
||||||
[#807]: https://github.com/rojo-rbx/rojo/pull/807
|
[#807]: https://github.com/rojo-rbx/rojo/pull/807
|
||||||
|
[#809]: https://github.com/rojo-rbx/rojo/pull/809
|
||||||
|
|
||||||
## [7.4.0-rc2] - October 3, 2023
|
## [7.4.0-rc2] - October 3, 2023
|
||||||
* Fixed bug with parsing version for plugin validation ([#797])
|
* Fixed bug with parsing version for plugin validation ([#797])
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,24 @@ return {
|
||||||
end,
|
end,
|
||||||
write = function(instance, _, value)
|
write = function(instance, _, value)
|
||||||
local existing = instance:GetAttributes()
|
local existing = instance:GetAttributes()
|
||||||
|
local didAllWritesSucceed = true
|
||||||
|
|
||||||
for key, attr in pairs(value) do
|
for attributeName, attributeValue in pairs(value) do
|
||||||
instance:SetAttribute(key, attr)
|
local isNameValid =
|
||||||
|
-- For our SetAttribute to succeed, the attribute name must be
|
||||||
|
-- less than or equal to 100 characters...
|
||||||
|
#attributeName <= 100
|
||||||
|
-- ...must only contain alphanumeric characters, periods, hyphens,
|
||||||
|
-- underscores, or forward slashes...
|
||||||
|
and attributeName:match("[^%w%.%-_/]") == nil
|
||||||
|
-- ... and must not use the RBX prefix, which is reserved by Roblox.
|
||||||
|
and attributeName:sub(1, 3) ~= "RBX"
|
||||||
|
|
||||||
|
if isNameValid then
|
||||||
|
instance:SetAttribute(attributeName, attributeValue)
|
||||||
|
else
|
||||||
|
didAllWritesSucceed = false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for key in pairs(existing) do
|
for key in pairs(existing) do
|
||||||
|
|
@ -48,7 +63,7 @@ return {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return true
|
return didAllWritesSucceed
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
Tags = {
|
Tags = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue