Repository: incubator-ignite Updated Branches: refs/heads/ignite-471 505dc6286 -> 1f021a734
ignite-471: fixed buffer overflow exception in optimizedmarshaller Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/887cb015 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/887cb015 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/887cb015 Branch: refs/heads/ignite-471 Commit: 887cb01544555e506f34ac69196e3cd83296f9d7 Parents: 505dc62 Author: Denis Magda <dma...@gridgain.com> Authored: Thu May 14 09:54:53 2015 +0300 Committer: Denis Magda <dma...@gridgain.com> Committed: Thu May 14 09:54:53 2015 +0300 ---------------------------------------------------------------------- .../GridClientOptimizedMarshaller.java | 2 +- .../optimized/OptimizedMarshaller.java | 22 +++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/887cb015/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java index ff77177..9fd6bbc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java @@ -67,7 +67,7 @@ public class GridClientOptimizedMarshaller implements GridClientMarshaller { throw new IOException("Message serialization of given type is not supported: " + obj.getClass().getName()); - return opMarsh.marshal(obj); + return opMarsh.marshal(obj, off); } catch (IgniteCheckedException e) { throw new IOException(e); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/887cb015/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java index a29bda2..28433ec 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java @@ -172,6 +172,18 @@ public class OptimizedMarshaller extends AbstractMarshaller { /** {@inheritDoc} */ @Override public ByteBuffer marshal(@Nullable Object obj) throws IgniteCheckedException { + return marshal(obj, 0); + } + + /** + * Marshals object to bytes. + * + * @param obj Object to marshal. + * @param offset Position where to start marshalling the object. + * @return Byte buffer. + * @throws IgniteCheckedException If marshalling failed. + */ + public ByteBuffer marshal(@Nullable Object obj, int offset) throws IgniteCheckedException { OptimizedObjectOutputStream objOut = null; try { @@ -182,7 +194,15 @@ public class OptimizedMarshaller extends AbstractMarshaller { objOut.writeObject(obj); - return ByteBuffer.wrap(objOut.out().internalArray(), 0, objOut.out().offset()); + ByteBuffer buffer = ByteBuffer.allocate(objOut.out().offset() + offset); + + buffer.position(offset); + + buffer.put(objOut.out().internalArray(), 0, objOut.out().offset()); + + buffer.flip(); + + return buffer; } catch (IOException e) { throw new IgniteCheckedException("Failed to serialize object: " + obj, e);