} finally { TempBuffer.free(tempBuf);
  public Value gzuncompress(InputStream is,                            @Optional("0") long length)  {    try {      if (length == 0)	length = Long.MAX_VALUE;      //    is.skip(2);      InflaterInputStream in = new InflaterInputStream(is);      TempStream out = new TempStream();      TempBuffer tempBuf = TempBuffer.allocate();      byte []buffer = tempBuf.getBuffer();      int len;      while ((len = in.read(buffer, 0, buffer.length)) >= 0) {	out.write(buffer, 0, len, false);      }      TempBuffer.free(tempBuf);      in.close();      return new TempBufferStringValue(out.getHead());    } catch (Exception e) {      throw QuercusModuleException.create(e);    }  }