Changeset 533:d7f2025ab6a0


Ignore:
Timestamp:
11/14/11 11:46:13 (3 months ago)
Author:
xeraph
Branch:
default
Message:

fixed rpc decoder (parse bug when remaining size > 0)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kraken-rpc/src/main/java/org/krakenapps/rpc/impl/RpcDecoder.java

    r373 r533  
    2929                        logger.debug("kraken-rpc: current readable length {}", buf.readableBytes()); 
    3030 
     31                buf.markReaderIndex(); 
    3132                if (buf.readableBytes() < 2) 
    3233                        return null; 
    3334 
     35                // read type byte 
    3436                buf.readByte(); 
     37 
     38                // read length bytes 
     39                int lengthBytes = 0; 
    3540                byte b = 0; 
    3641                boolean eon = false; 
     
    4045 
    4146                        b = buf.readByte(); 
     47                        lengthBytes++; 
     48 
    4249                        if ((b & 0x80) != 0x80) { 
    4350                                eon = true; 
     
    5259 
    5360                buf.resetReaderIndex(); 
     61 
     62                // read type byte 
    5463                buf.readByte(); 
     64 
     65                // byte buffer read does not modify readable index 
    5566                long length = EncodingRule.decodeRawNumber(buf.toByteBuffer()); 
    5667 
    57                 if (buf.readableBytes() > length) { 
     68                if (buf.readableBytes() >= lengthBytes + length) { 
    5869                        buf.resetReaderIndex(); 
    59                         int numLength = EncodingRule.lengthOfRawNumber(int.class, length); 
    60                         ByteBuffer bb = ByteBuffer.allocate((int) length + numLength + 1); 
     70                        ByteBuffer bb = ByteBuffer.allocate((int) length + lengthBytes + 1); 
    6171                        buf.readBytes(bb); 
    6272                        bb.flip(); 
     
    6575                        if (logger.isDebugEnabled()) 
    6676                                logger.debug("kraken-rpc: decoded one message, remaining {}", buf.readableBytes()); 
    67                          
    68                         buf.markReaderIndex(); 
     77 
    6978                        return decoded; 
    7079                } 
Note: See TracChangeset for help on using the changeset viewer.