diff options
author | Michi Henning <michi@zeroc.com> | 2007-11-26 12:04:19 +1000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2007-11-26 12:04:19 +1000 |
commit | 36045f37b39ab655bea41947d5a8145c5a514328 (patch) | |
tree | 3b6e8436f6f9d6f1ba390a6ff73053549829f40d /cpp/src/slice2cpp/Gen.cpp | |
parent | Fixed VC6 build failures (diff) | |
download | ice-36045f37b39ab655bea41947d5a8145c5a514328.tar.bz2 ice-36045f37b39ab655bea41947d5a8145c5a514328.tar.xz ice-36045f37b39ab655bea41947d5a8145c5a514328.zip |
Bug 2474.
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rwxr-xr-x | cpp/src/slice2cpp/Gen.cpp | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index b05911e333e..65fd5a08e58 100755 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -1454,15 +1454,15 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p) C << sb; if(sz <= 0x7f) { - C << nl << "__os->write(static_cast< ::Ice::Byte>(v));"; + C << nl << "__os->write(static_cast< ::Ice::Byte>(v), " << sz << ");"; } else if(sz <= 0x7fff) { - C << nl << "__os->write(static_cast< ::Ice::Short>(v));"; + C << nl << "__os->write(static_cast< ::Ice::Short>(v), " << sz << ");"; } else { - C << nl << "__os->write(static_cast< ::Ice::Int>(v));"; + C << nl << "__os->write(static_cast< ::Ice::Int>(v), " << sz << ");"; } C << eb; @@ -1472,21 +1472,17 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p) if(sz <= 0x7f) { C << nl << "::Ice::Byte val;"; - C << nl << "__is->read(val);"; - C << nl << "v = static_cast< " << scoped << ">(val);"; } else if(sz <= 0x7fff) { C << nl << "::Ice::Short val;"; - C << nl << "__is->read(val);"; - C << nl << "v = static_cast< " << scoped << ">(val);"; } else { C << nl << "::Ice::Int val;"; - C << nl << "__is->read(val);"; - C << nl << "v = static_cast< " << scoped << ">(val);"; } + C << nl << "__is->read(val, " << sz << ");"; + C << nl << "v = static_cast< " << scoped << ">(val);"; C << eb; if(_stream) @@ -1494,6 +1490,15 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p) C << sp << nl << "void" << nl << scope.substr(2) << "ice_write" << p->name() << "(const ::Ice::OutputStreamPtr& __outS, " << scoped << " v)"; C << sb; + C << nl << "if("; + if(sz > 0x7f) + { + C << "static_cast<int>(val) < 0 || "; + } + C << "static_cast<int>(v) >= " << sz << ")"; + C << sb; + C << nl << "throw ::Ice::MarshalException(__FILE__, __LINE__, \"enumerator out of range\");"; + C << eb; if(sz <= 0x7f) { C << nl << "__outS->writeByte(static_cast< ::Ice::Byte>(v));"; @@ -1514,18 +1519,25 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p) if(sz <= 0x7f) { C << nl << "::Ice::Byte val = __inS->readByte();"; - C << nl << "v = static_cast< " << scoped << ">(val);"; } else if(sz <= 0x7fff) { C << nl << "::Ice::Short val = __inS->readShort();"; - C << nl << "v = static_cast< " << scoped << ">(val);"; } else { C << nl << "::Ice::Int val = __inS->readInt();"; - C << nl << "v = static_cast< " << scoped << ">(val);"; } + C << nl << "if("; + if(sz > 0x7f) + { + C << "val < 0 || "; + } + C << "val > " << sz << ")"; + C << sb; + C << nl << "throw ::Ice::MarshalException(__FILE__, __LINE__, \"enumerator out of range\");"; + C << eb; + C << nl << "v = static_cast< " << scoped << ">(val);"; C << eb; } } |