grid.lua:242: invalid order function for sorting
Addon Version
v0.3.18
World of Warcraft Version
Retail
Describe the bug
5x BetterBags/frames/grid.lua:242: invalid order function for sorting
[string "=[C]"]: in function sort' [string "@BetterBags/frames/grid.lua"]:242: in function Sort'
[string "@BetterBags/views/gridview.lua"]:371: in function Render' [string "@BetterBags/frames/bag.lua"]:316: in function Draw'
[string "@BetterBags/core/init.lua"]:290: in function cb' [string "@BetterBags/core/events.lua"]:49: in function <BetterBags/core/events.lua:47> [string "=[C]"]: ? [string "@Masque/Libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua"]:19: in function <...que/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:15> [string "@Masque/Libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua"]:54: in function SendMessage'
[string "@BetterBags/core/events.lua"]:206: in function `SendMessage'
[string "@BetterBags/core/events.lua"]:224: in function <BetterBags/core/events.lua:223>
Locals: (*temporary) =
This is happening again after getting out of Comp Stomp. Multiple reloads and the problem persists, and I'm unable to see anyitem in my bags.
I continue to see this happen inconsistently. The only BetterBags plugin I use is BetterBags: Gear First. That does affect sorting, so it could be related.
I've been getting this and also use Gear Frist, so going to try disabling and see if it resolves
Fixed
This issue was caused by external addons modifying BetterBags' saved variables, resulting in invalid sort type values being retrieved from the database. When GetSectionSortFunction() encountered an unknown sort type, it would pass an invalid (nil or non-function) value to grid:Sort(), causing the "invalid order function for sorting" error.
Changes Made
-
util/sort.lua:55 - Fixed the fallback logic to return a proper alphabetical sort function directly instead of making a recursive call with incorrect parameters
-
frames/grid.lua:242 - Added defensive guard to validate the sort function parameter:
- Checks if
fnis actually a function usingtype(fn) ~= "function" - Falls back to a no-op comparison function if invalid
- Prevents crashes regardless of what external addons do to saved variables
- Checks if
-
Documented pattern - Added new defensive programming pattern to
.roo/rules/patterns.mdfor handling external addon interference
The fix ensures BetterBags gracefully handles corrupted saved variables by validating function parameters and providing safe defaults, preventing crashes when external addons modify the addon's data.