Bug in jinterface

Raimo Niskanen <>
Tue Aug 23 12:16:25 CEST 2005


This bug is fixed in R10B (jinterface-1.3) and later:

  public void write_string(String s) { 
    int len = s.length();
    
    switch(len) {
    case 0:
      this.write_nil();
      break;
    default:
      byte[] bytebuf = s.getBytes();

      /* switch to se if the length of
	 the byte array is equal to the 
	 length of the list, or if the string is too long
	 for the stream protocol */
      if ((bytebuf.length == len) && (len <= 65535)) { /* Usual */
	this.write1(OtpExternal.stringTag);
	this.write2BE(len);
	this.writeN(bytebuf);
      } 
      else { /* Unicode */
	char[] charbuf = s.toCharArray();
	
	this.write_list_head(len);
	
	for(int i = 0; i<len; i++)
	  this.write_char(charbuf[i]);
	
	this.write_nil();
      }
    }
  }

Thank you for finding it anyway!



 (Vlad Dumitrescu) writes:

> Hi,
> 
> The OtpOutputStream implementation in jinterface is not conforming to
> the external distribution format: method write_string doesn't check if
> the length is >= 65536, when the sitring should be output with a
> listTag, not a stringTag.
> 
> The patch is (sorry, but I have a modified version of the file and the
> line numbers don't match)
> 
> -            if (bytebuf.length == len && len < 65535)
> +            if (bytebuf.length == len)
> 
> regards,
> Vlad
> 

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-bugs mailing list