From 0f6ece995efd867af0f9499bf30104eb28409fa9 Mon Sep 17 00:00:00 2001 From: irengrig Date: Fri, 20 Jul 2012 19:43:42 +0400 Subject: [PATCH] IDEA-78117 NULL characters appended to file when retrieving historical revisions in SVN --- .../src/org/jetbrains/idea/svn/SvnContentRevision.java | 10 ++++++---- .../svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnContentRevision.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnContentRevision.java index 34dceaffd3e7..bc6209fe905f 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnContentRevision.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnContentRevision.java @@ -30,13 +30,13 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.tmatesoft.svn.core.SVNException; -import org.tmatesoft.svn.core.wc.SVNInfo; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNWCClient; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; /** * @author yole @@ -118,19 +118,21 @@ public class SvnContentRevision implements ContentRevision, MarkerVcsContentRevi buffer.close(); } catch (SVNException e) { - try { + /*try { final SVNInfo info = wcClient.doInfo(file, SVNRevision.UNDEFINED); //todo } catch (SVNException e1) { throw new VcsException(e); - } + }*/ throw new VcsException(e); } catch (IOException e) { throw new VcsException(e); } - return buffer.toByteArray(); + final byte[] bytes = buffer.toByteArray(); + final Charset charset = myFile.getCharset(); + return charset == null ? bytes : SvnUtil.decode(charset, bytes); } @NotNull diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java index 3892bc875486..457317422936 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java @@ -48,6 +48,7 @@ import org.tmatesoft.svn.core.wc2.SvnOperationFactory; import java.io.File; import java.nio.ByteBuffer; +import java.nio.CharBuffer; import java.nio.charset.Charset; import java.util.*; @@ -683,7 +684,9 @@ public class SvnUtil { public static byte[] decode(final Charset charset, final byte[] buffer) { if (charset != null && ! CharsetToolkit.UTF8_CHARSET.equals(charset)) { - return CharsetToolkit.UTF8_CHARSET.encode(charset.decode(ByteBuffer.wrap(buffer))).array(); + final CharBuffer decoded = charset.decode(ByteBuffer.wrap(buffer)); + final ByteBuffer byteBuffer = CharsetToolkit.UTF8_CHARSET.encode(decoded); + return ArrayUtil.realloc(byteBuffer.array(), byteBuffer.remaining()); } return buffer; }