Changeset 3096


Ignore:
Timestamp:
08/22/07 13:57:57 (12 years ago)
Author:
curtis
Message:

Fix bug in buffer allocation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/ND2Reader.java

    r3060 r3096  
    187187    } 
    188188    else { 
    189       in.read(buf); 
     189      in.readFully(buf); 
    190190    } 
    191191 
     
    261261          // found a data chunk 
    262262          int len = in.readInt() + in.readInt(); 
    263           if (len > b.length) b = new byte[b.length + b.length]; 
     263          if (len > b.length) { 
     264            // make sure size at least doubles, for efficiency 
     265            int size = b.length + b.length; 
     266            if (size < len) size = len; 
     267            b = new byte[size]; 
     268          } 
    264269          in.skipBytes(4); 
    265270 
     271          if (debug) { 
     272            debug("Reading chunk of size " + len + 
     273              " at position " + in.getFilePointer()); 
     274          } 
    266275          in.readFully(b, 0, len); 
    267276 
     
    272281          { 
    273282            // found pixel data 
    274            
     283 
    275284            StringBuffer sb = new StringBuffer(); 
    276285            int pt = 13; 
     
    287296            offsets[ndx] = in.getFilePointer() - len + sb.length() + 21; 
    288297          } 
    289           //else if (check.startsWith("Image")) { 
    290298          else if (len >= 5 && b[0] == 'I' && b[1] == 'm' && b[2] == 'a' && 
    291299            b[3] == 'g' && b[4] == 'e') // b.startsWith("Image") 
     
    299307            for (int i=0; i<len; i++) { 
    300308              char c = (char) b[i]; 
    301               if (off == 0 && c == '!') off = i + 1;  
    302                
     309              if (off == 0 && c == '!') off = i + 1; 
     310 
    303311              if (Character.isISOControl(c) || !Character.isDefined(c)) { 
    304                 b[i] = (byte) ' ';  
     312                b[i] = (byte) ' '; 
    305313              } 
    306314            } 
    307           
    308             if (b[off] == '<' && b[off + 1] == '?' && b[off + 2] == 'x' &&  
    309               b[off + 3] == 'm' && b[off + 4] == 'l') 
     315 
     316            if (len - off >= 5 && b[off] == '<' && b[off + 1] == '?' && 
     317              b[off + 2] == 'x' && b[off + 3] == 'm' && 
     318              b[off + 4] == 'l') // b.substring(off, off + 5).equals("<?xml") 
    310319            { 
    311               ByteArrayInputStream s =  
     320              ByteArrayInputStream s = 
    312321                new ByteArrayInputStream(b, off, len - off); 
    313322 
     
    322331                throw new FormatException(exc); 
    323332              } 
    324             }  
     333            } 
    325334          } 
    326335 
     
    335344        } 
    336345      } 
    337    
     346 
    338347      if (core.sizeC[0] == 0) core.sizeC[0] = 1; 
    339348      core.currentOrder[0] = "XYCZT"; 
     
    670679 
    671680    MetadataStore store = getMetadataStore(); 
    672     store.setImage(currentId, null, null, null);  
     681    store.setImage(currentId, null, null, null); 
    673682    store.setPixels( 
    674683      new Integer(core.sizeX[0]), 
     
    729738      } 
    730739      else if (qName.equals("uiBpcInMemory")) { 
    731         if (attributes.getValue("value") == null) return;  
     740        if (attributes.getValue("value") == null) return; 
    732741        int bits = Integer.parseInt(attributes.getValue("value")); 
    733742        int bytes = bits / 8; 
Note: See TracChangeset for help on using the changeset viewer.