diff options
author | Melanie Thielker | 2008-09-21 15:54:58 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-09-21 15:54:58 +0000 |
commit | 83b030229ec1d91edcf00269eedfc9c9075b877e (patch) | |
tree | dfd81404c516fae4ab7bb1551515b59d3545b0aa /OpenSim/Region/ScriptEngine/Common/LSL_Types.cs | |
parent | The viewer only stores a screenshot on "Set home to here" if the alert that (diff) | |
download | opensim-SC_OLD-83b030229ec1d91edcf00269eedfc9c9075b877e.zip opensim-SC_OLD-83b030229ec1d91edcf00269eedfc9c9075b877e.tar.gz opensim-SC_OLD-83b030229ec1d91edcf00269eedfc9c9075b877e.tar.bz2 opensim-SC_OLD-83b030229ec1d91edcf00269eedfc9c9075b877e.tar.xz |
Mantis #2232
Thank you, idb, for a patch that fixes an overflow issue in casting
string -> int for both engines, and adds tests!
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common/LSL_Types.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/LSL_Types.cs | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs index 8c24ae3..5bfe8bf 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs | |||
@@ -1269,8 +1269,7 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
1269 | 1269 | ||
1270 | public static explicit operator LSLInteger(LSLString s) | 1270 | public static explicit operator LSLInteger(LSLString s) |
1271 | { | 1271 | { |
1272 | // double.Parse() used because s could be "123.9" for example. | 1272 | return new LSLInteger(s.m_string); |
1273 | return new LSLInteger(double.Parse(s.m_string)); | ||
1274 | } | 1273 | } |
1275 | 1274 | ||
1276 | public static explicit operator LSLString(double d) | 1275 | public static explicit operator LSLString(double d) |
@@ -1353,7 +1352,32 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
1353 | 1352 | ||
1354 | public LSLInteger(string s) | 1353 | public LSLInteger(string s) |
1355 | { | 1354 | { |
1356 | value = (int)double.Parse(s); | 1355 | Regex r = new Regex("^[ ]*-?[0-9][0-9xX]?[0-9a-fA-F]*"); |
1356 | Match m = r.Match(s); | ||
1357 | string v = m.Groups[0].Value; | ||
1358 | |||
1359 | if (v == String.Empty) | ||
1360 | { | ||
1361 | value = 0; | ||
1362 | } | ||
1363 | else | ||
1364 | { | ||
1365 | try | ||
1366 | { | ||
1367 | if (v.Contains("x") || v.Contains("X")) | ||
1368 | { | ||
1369 | value = int.Parse(v.Substring(2), System.Globalization.NumberStyles.HexNumber); | ||
1370 | } | ||
1371 | else | ||
1372 | { | ||
1373 | value = int.Parse(v, System.Globalization.NumberStyles.Integer); | ||
1374 | } | ||
1375 | } | ||
1376 | catch (OverflowException oe) | ||
1377 | { | ||
1378 | value = -1; | ||
1379 | } | ||
1380 | } | ||
1357 | } | 1381 | } |
1358 | 1382 | ||
1359 | #endregion | 1383 | #endregion |
@@ -1394,8 +1418,7 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
1394 | 1418 | ||
1395 | static public explicit operator LSLInteger(string s) | 1419 | static public explicit operator LSLInteger(string s) |
1396 | { | 1420 | { |
1397 | // double.Parse() used because s could be "123.9" for example. | 1421 | return new LSLInteger(s); |
1398 | return new LSLInteger(double.Parse(s)); | ||
1399 | } | 1422 | } |
1400 | 1423 | ||
1401 | static public implicit operator LSLInteger(uint u) | 1424 | static public implicit operator LSLInteger(uint u) |