Thread Tools Display Modes
03/16/21, 06:26 PM   #1
Phuein
 
Phuein's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2018
Posts: 132
Post [notabug] SetText() with gsub operation crashes game

I have a couple of undocumented functions from the old author of the Notebook 2018 addon. They look like:
Code:
function NBUI.ProtectText(text)
	return text:gsub([[\]], [[%%92]])
end

function NBUI.UnprotectText(text)
	return text:gsub([[%%92]], [[\]])
end
They are called when changing element text, such as:
Code:
NBUI.NB1RightPage_Title:SetText(NBUI.UnprotectText(title))
Or the other, when saving into variable.

I couldn't load the game with it. Other users reported errors only. I removed them, assuming that by now the game handles string issues better than years ago. This is to help the devs figure out the issue further, to avoid future crashes. Thanks!
 
03/20/21, 03:31 AM   #2
votan
 
votan's Avatar
AddOn Author - Click to view addons
Join Date: Oct 2014
Posts: 577
Originally Posted by Phuein View Post
I have a couple of undocumented functions from the old author of the Notebook 2018 addon. They look like:
Code:
function NBUI.ProtectText(text)
	return text:gsub([[\]], [[%%92]])
end

function NBUI.UnprotectText(text)
	return text:gsub([[%%92]], [[\]])
end
They are called when changing element text, such as:
Code:
NBUI.NB1RightPage_Title:SetText(NBUI.UnprotectText(title))
Or the other, when saving into variable.

I couldn't load the game with it. Other users reported errors only. I removed them, assuming that by now the game handles string issues better than years ago. This is to help the devs figure out the issue further, to avoid future crashes. Thanks!
gsub returns two values: the changed string and the replacement count.
SetText takes two parameters. But the second must be boolean. gsub returns int. => boom
You can not directly use gsub and SetText in one operation.
=>
Lua Code:
  1. local value = gsub(...) -- take first return value only.
  2. edit:SetText(value)
 
03/20/21, 09:05 AM   #3
Phuein
 
Phuein's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2018
Posts: 132
Originally Posted by votan View Post
gsub returns two values: the changed string and the replacement count.
SetText takes two parameters. But the second must be boolean. gsub returns int. => boom
You can not directly use gsub and SetText in one operation.
=>
Lua Code:
  1. local value = gsub(...) -- take first return value only.
  2. edit:SetText(value)
This was used as-is up until the last patch without issue. I assume gsub() is the same, so unless SetText() was changed - do you know that it was? - the other option is the string operation. Either way, breaking-changes without a notification is rough.
 
03/20/21, 03:56 PM   #4
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,566
Originally Posted by Phuein View Post
This was used as-is up until the last patch without issue. I assume gsub() is the same, so unless SetText() was changed - do you know that it was? - the other option is the string operation. Either way, breaking-changes without a notification is rough.
That's not a breaking change - the addon code was just written naively.
Regardless of language or project, one should never pass variable returns directly into functions that are maintained by a third party. Otherwise there will be surprises like that in case the function is updated to accept new arguments.
 

ESOUI » Developer Discussions » Bug Reports » [notabug] SetText() with gsub operation crashes game

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off