515 has changed the result of isnum() when processing not a number. In 514.1589 isnum would guard it at least in the scenario of text2num (but not necessarily in other cases). But now in 515.1610, 515.1630 and likely many other versions of 515, the behavior has regressed. Not a Number literally is not a number; that doesn't make it a number. I see no reason why this behavior should regress. If you do want to some reason accept NaN in 515 then you have isnan or testing against self to detect that and handle accordingly.
Numbered Steps to Reproduce Problem:
Update to 515.
Realize bad players are exploiting number inputs in your game by sending topics with nan.
Update your code to also guard via if(thing != thing) return
Code Snippet (if applicable) to Reproduce Problem:
var/one = text2num("nan")
var/two = text2num("NaN")
var/three = text2num("naN")
var/four = text2num("4")
world.log << isnum(one)
world.log << isnum(two)
world.log << isnum(three)
world.log << isnum(four)
world.log << (one != one)
world.log << (two != two)
world.log << (three != three)
world.log << (four != four)
Expected Results:
(514.1589)
0
0
0
1
0
0
0
0
The first 3 falses here are isnum returning false for nan.
Actual Results:
(515.1630)
1
1
1
1
1
1
1
0
The first 3 trues here are isnum returning true for NaN
Does the problem occur:
Every time? Or how often?
Yes
In other games?
Yes
In other user accounts?
Yes
On other computers?
Yes
When does the problem NOT occur?
514.1589
Did the problem NOT occur in any earlier versions? If so, what was the last version that worked? (Visit http://www.byond.com/download/build to download old versions for testing.)
514.1589
Workarounds:
Don't use 515 or guard it with a != check or maybe isnan check if you exclusively are on 515 (untested).
What remains an open question is whether text2num() and inputs are what changed, which should be testable via checking \ref and JSON results on the values you get.