summaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2015-02-17 21:34:57 +0100
committerJose <jose@zeroc.com>2015-02-17 21:34:57 +0100
commit5e825196fcf15ab3ea59b05f1e250f98117d4d8d (patch)
treeb7d09827dd9ea5fc89c43c26d6b6ef1e2b395be6 /js/src
parentICE-6313 Add Python/Ruby/PHP support for WSEndpointInfo / WSConnectionInfo (diff)
downloadice-5e825196fcf15ab3ea59b05f1e250f98117d4d8d.tar.bz2
ice-5e825196fcf15ab3ea59b05f1e250f98117d4d8d.tar.xz
ice-5e825196fcf15ab3ea59b05f1e250f98117d4d8d.zip
ICE-6306 added checks to javascript for float/double/long
Diffstat (limited to 'js/src')
-rw-r--r--js/src/Ice/BasicStream.js74
1 files changed, 49 insertions, 25 deletions
diff --git a/js/src/Ice/BasicStream.js b/js/src/Ice/BasicStream.js
index 057b7fd81e7..50b445bc827 100644
--- a/js/src/Ice/BasicStream.js
+++ b/js/src/Ice/BasicStream.js
@@ -2890,31 +2890,21 @@ defineProperty(BasicStream.prototype, "buffer", {
get: function() { return this._buf; }
});
-var defineBuiltinHelperWithRangeCheck = function(write, read, sz, format, min, max)
+var defineBuiltinHelper = function(write, read, sz, format, min, max)
{
var helper = {
write: function(os, v) { return write.call(os, v); },
read: function(is) { return read.call(is); },
writeOpt: function(os, tag, v) { os.writeOptValue(tag, format, write, v); },
readOpt: function(is, tag) { return is.readOptValue(tag, format, read); },
- validate: function(v) {
+ };
+
+ if(min !== undefined && max != undefined)
+ {
+ helper.validate = function(v) {
return v >= min && v <= max;
}
- };
- defineProperty(helper, "minWireSize", {
- get: function() { return sz; }
- });
- return helper;
-};
-
-var defineBuiltinHelper = function(write, read, sz, format)
-{
- var helper = {
- write: function(os, v) { return write.call(os, v); },
- read: function(is) { return read.call(is); },
- writeOpt: function(os, tag, v) { os.writeOptValue(tag, format, write, v); },
- readOpt: function(is, tag) { return is.readOptValue(tag, format, read); },
- };
+ }
defineProperty(helper, "minWireSize", {
get: function() { return sz; }
});
@@ -2922,18 +2912,52 @@ var defineBuiltinHelper = function(write, read, sz, format)
};
var stream = BasicStream.prototype;
-Ice.ByteHelper =
- defineBuiltinHelperWithRangeCheck(stream.writeByte, stream.readByte, 1, Ice.OptionalFormat.F1, 0, 255);
-Ice.ShortHelper =
- defineBuiltinHelperWithRangeCheck(stream.writeShort, stream.readShort, 2, Ice.OptionalFormat.F2, -32768, 32767);
-Ice.IntHelper =
- defineBuiltinHelperWithRangeCheck(stream.writeInt, stream.readInt, 4, Ice.OptionalFormat.F4, -2147483648, 2147483647);
-Ice.FloatHelper = defineBuiltinHelper(stream.writeFloat, stream.readFloat, 4, Ice.OptionalFormat.F4);
-Ice.DoubleHelper = defineBuiltinHelper(stream.writeDouble, stream.readDouble, 8, Ice.OptionalFormat.F8);
+
+//
+// Constants to use in number type range checks.
+//
+var MIN_UINT8_VALUE = 0x0;
+var MAX_UINT8_VALUE = 0xFF;
+
+var MIN_INT16_VALUE = -0x8000;
+var MAX_INT16_VALUE = 0x7FFF;
+
+var MIN_UINT32_VALUE = 0x0;
+var MAX_UINT32_VALUE = 0xFFFFFFFF;
+
+var MIN_INT32_VALUE = -0x80000000;
+var MAX_INT32_VALUE = 0x7FFFFFFF;
+
+var MIN_FLOAT32_VALUE = -3.4028234664e+38;
+var MAX_FLOAT32_VALUE = 3.4028234664e+38;
+
+Ice.ByteHelper = defineBuiltinHelper(stream.writeByte, stream.readByte, 1, Ice.OptionalFormat.F1,
+ MIN_UINT8_VALUE, MAX_UINT8_VALUE);
+
+Ice.ShortHelper = defineBuiltinHelper(stream.writeShort, stream.readShort, 2, Ice.OptionalFormat.F2,
+ MIN_INT16_VALUE, MAX_INT16_VALUE);
+
+Ice.IntHelper = defineBuiltinHelper(stream.writeInt, stream.readInt, 4, Ice.OptionalFormat.F4,
+ MIN_INT32_VALUE, MAX_INT32_VALUE);
+
+Ice.FloatHelper = defineBuiltinHelper(stream.writeFloat, stream.readFloat, 4, Ice.OptionalFormat.F4,
+ MIN_FLOAT32_VALUE, MAX_FLOAT32_VALUE);
+
+Ice.DoubleHelper = defineBuiltinHelper(stream.writeDouble, stream.readDouble, 8, Ice.OptionalFormat.F8,
+ -Number.MAX_VALUE, Number.MAX_VALUE);
Ice.BoolHelper = defineBuiltinHelper(stream.writeBool, stream.readBool, 1, Ice.OptionalFormat.F1);
Ice.LongHelper = defineBuiltinHelper(stream.writeLong, stream.readLong, 8, Ice.OptionalFormat.F8);
+Ice.LongHelper.validate = function(v)
+{
+ //
+ // For a long to be valid both words must be within the range of UINT32
+ //
+ return v.low >= MIN_UINT32_VALUE && v.low <= MAX_UINT32_VALUE &&
+ v.high >= MIN_UINT32_VALUE && v.high <= MAX_UINT32_VALUE;
+}
+
Ice.StringHelper = defineBuiltinHelper(stream.writeString, stream.readString, 1, Ice.OptionalFormat.VSize);
Ice.ObjectHelper = {