Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wolf2021-09-02 22:17:46 +0000
committerThomas Wolf2021-11-04 21:21:11 +0000
commit48579213f42d7cab5914daec64c25f0d4aef8ed7 (patch)
treee4540c3eaeb9fd3b879755dcfc49134c7c38a6f8
parent3587dbc27d5f4a62fae21b702afebbf1cce09e87 (diff)
downloadegit-48579213f42d7cab5914daec64c25f0d4aef8ed7.tar.gz
egit-48579213f42d7cab5914daec64c25f0d4aef8ed7.tar.xz
egit-48579213f42d7cab5914daec64c25f0d4aef8ed7.zip
Don't rely on an implicit default character set
JEP 400 (Java 18) will change the default character set to UTF-8 unconditionally.[1] EGit has two places where it used the default character set implicitly, and two where it used it explicitly. Change all four locations to use SystemReader.getDefaultCharset(), which gets the locale-dependent charset the way JEP 400 recommends. [1] https://openjdk.java.net/jeps/400 Change-Id: I0d16916d2ed5a91fa27f23357dfc15306b65d132 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/internal/signing/ExternalGpgSigner.java6
-rw-r--r--org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java23
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/revision/EditableRevision.java7
3 files changed, 27 insertions, 9 deletions
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/signing/ExternalGpgSigner.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/signing/ExternalGpgSigner.java
index 49790c8d08..d565d64047 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/signing/ExternalGpgSigner.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/internal/signing/ExternalGpgSigner.java
@@ -16,7 +16,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import java.util.Arrays;
@@ -160,7 +159,7 @@ public class ExternalGpgSigner extends GpgSigner implements GpgObjectSigner {
if (b != null) {
try {
return new String(b.toByteArray(4000),
- Charset.defaultCharset());
+ SystemReader.getInstance().getDefaultCharset());
} catch (IOException e) {
Activator.logWarning(CoreText.ExternalGpgSigner_bufferError, e);
}
@@ -459,7 +458,8 @@ public class ExternalGpgSigner extends GpgSigner implements GpgObjectSigner {
runProcess(process, null, b -> {
try (BufferedReader r = new BufferedReader(
new InputStreamReader(b.openInputStream(),
- Charset.defaultCharset()))) {
+ SystemReader.getInstance()
+ .getDefaultCharset()))) {
result[0] = r.readLine();
}
}, null);
diff --git a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java
index e65826a8de..2d3d522c08 100644
--- a/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java
+++ b/org.eclipse.egit.core/src/org/eclipse/egit/core/op/CreatePatchOperation.java
@@ -59,6 +59,7 @@ import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.treewalk.FileTreeIterator;
import org.eclipse.jgit.treewalk.filter.TreeFilter;
+import org.eclipse.jgit.util.SystemReader;
import org.eclipse.osgi.util.NLS;
/**
@@ -254,12 +255,28 @@ public class CreatePatchOperation implements IEGitOperation {
private void appendOutputStream(final StringBuilder sb,
final ByteArrayOutputStream outputStream) {
+ String encoding = currentEncoding != null ? currentEncoding
+ : UTF_8.name();
try {
- String encoding = currentEncoding != null ? currentEncoding
- : UTF_8.name();
sb.append(outputStream.toString(encoding));
} catch (UnsupportedEncodingException e) {
- sb.append(outputStream.toString());
+ // Can only happen if encoding != UTF-8
+ String defaultCharset = SystemReader.getInstance()
+ .getDefaultCharset().name();
+ try {
+ if (!encoding.equals(defaultCharset)) {
+ sb.append(outputStream.toString(defaultCharset));
+ return;
+ }
+ } catch (UnsupportedEncodingException ignored) {
+ // What? The locale charset is also not known? Fall back to
+ // UTF-8.
+ }
+ try {
+ sb.append(outputStream.toString(UTF_8.name()));
+ } catch (UnsupportedEncodingException cannotOccur) {
+ // Known not to happen.
+ }
}
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/revision/EditableRevision.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/revision/EditableRevision.java
index 5e66f0229c..3c36b2c4c5 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/revision/EditableRevision.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/revision/EditableRevision.java
@@ -32,6 +32,7 @@ import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.IDocument;
+import org.eclipse.jgit.util.SystemReader;
import org.eclipse.swt.widgets.Display;
import org.eclipse.team.core.history.IFileRevision;
import org.eclipse.ui.IEditorInput;
@@ -221,10 +222,10 @@ public class EditableRevision extends FileRevisionTypedElement implements
try {
String charset = editable.getCharset();
if (charset == null) {
- editable.setContent(document.get().getBytes());
- } else {
- editable.setContent(document.get().getBytes(charset));
+ charset = SystemReader.getInstance().getDefaultCharset()
+ .name();
}
+ editable.setContent(document.get().getBytes(charset));
// We _know_ that the document provider _cannot_ really save
// the IStorage. Nevertheless calling its save operation is
// necessary because otherwise an internal "modified" flag

Back to the top