Merge branch 'stable-5.1' into stable-5.2

* stable-5.1:
  BasePackConnection: Check for expected length of ref advertisement
  TransferConfig: Make constructors public

Change-Id: I2480a0455250ee381fae93cac2db30f8305fa6aa
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
This commit is contained in:
David Pursehouse 2018-12-20 14:01:52 +09:00
commit 3cb80a433d
4 changed files with 38 additions and 3 deletions

View File

@ -390,6 +390,7 @@ invalidPathPeriodAtEndWindows=Invalid path (period at end is ignored by Windows)
invalidPathSpaceAtEndWindows=Invalid path (space at end is ignored by Windows): {0} invalidPathSpaceAtEndWindows=Invalid path (space at end is ignored by Windows): {0}
invalidPathReservedOnWindows=Invalid path (''{0}'' is reserved on Windows): {1} invalidPathReservedOnWindows=Invalid path (''{0}'' is reserved on Windows): {1}
invalidRedirectLocation=Invalid redirect location {0} -> {1} invalidRedirectLocation=Invalid redirect location {0} -> {1}
invalidRefAdvertisementLine=Invalid ref advertisement line: ''{1}''
invalidReflogRevision=Invalid reflog revision: {0} invalidReflogRevision=Invalid reflog revision: {0}
invalidRefName=Invalid ref name: {0} invalidRefName=Invalid ref name: {0}
invalidReftableBlock=Invalid reftable block invalidReftableBlock=Invalid reftable block

View File

@ -451,6 +451,7 @@ public static JGitText get() {
/***/ public String invalidPathSpaceAtEndWindows; /***/ public String invalidPathSpaceAtEndWindows;
/***/ public String invalidPathReservedOnWindows; /***/ public String invalidPathReservedOnWindows;
/***/ public String invalidRedirectLocation; /***/ public String invalidRedirectLocation;
/***/ public String invalidRefAdvertisementLine;
/***/ public String invalidReflogRevision; /***/ public String invalidReflogRevision;
/***/ public String invalidRefName; /***/ public String invalidRefName;
/***/ public String invalidReftableBlock; /***/ public String invalidReftableBlock;

View File

@ -57,6 +57,7 @@
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Set; import java.util.Set;
import org.eclipse.jgit.errors.InvalidObjectIdException;
import org.eclipse.jgit.errors.NoRemoteRepositoryException; import org.eclipse.jgit.errors.NoRemoteRepositoryException;
import org.eclipse.jgit.errors.PackProtocolException; import org.eclipse.jgit.errors.PackProtocolException;
import org.eclipse.jgit.errors.RemoteRepositoryException; import org.eclipse.jgit.errors.RemoteRepositoryException;
@ -222,6 +223,10 @@ private void readAdvertisedRefsImpl() throws IOException {
} }
} }
// Expecting to get a line in the form "sha1 refname"
if (line.length() < 41 || line.charAt(40) != ' ') {
throw invalidRefAdvertisementLine(line);
}
String name = line.substring(41, line.length()); String name = line.substring(41, line.length());
if (avail.isEmpty() && name.equals("capabilities^{}")) { //$NON-NLS-1$ if (avail.isEmpty() && name.equals("capabilities^{}")) { //$NON-NLS-1$
// special line from git-receive-pack to show // special line from git-receive-pack to show
@ -229,7 +234,12 @@ private void readAdvertisedRefsImpl() throws IOException {
continue; continue;
} }
final ObjectId id = ObjectId.fromString(line.substring(0, 40)); final ObjectId id;
try {
id = ObjectId.fromString(line.substring(0, 40));
} catch (InvalidObjectIdException e) {
throw invalidRefAdvertisementLine(line);
}
if (name.equals(".have")) { //$NON-NLS-1$ if (name.equals(".have")) { //$NON-NLS-1$
additionalHaves.add(id); additionalHaves.add(id);
} else if (name.endsWith("^{}")) { //$NON-NLS-1$ } else if (name.endsWith("^{}")) { //$NON-NLS-1$
@ -318,6 +328,10 @@ private PackProtocolException duplicateAdvertisement(String name) {
return new PackProtocolException(uri, MessageFormat.format(JGitText.get().duplicateAdvertisementsOf, name)); return new PackProtocolException(uri, MessageFormat.format(JGitText.get().duplicateAdvertisementsOf, name));
} }
private PackProtocolException invalidRefAdvertisementLine(String line) {
return new PackProtocolException(uri, MessageFormat.format(JGitText.get().invalidRefAdvertisementLine, line));
}
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void close() { public void close() {

View File

@ -134,12 +134,31 @@ static ProtocolVersion parse(@Nullable String name) {
final @Nullable ProtocolVersion protocolVersion; final @Nullable ProtocolVersion protocolVersion;
final String[] hideRefs; final String[] hideRefs;
TransferConfig(Repository db) { /**
* Create a configuration honoring the repository's settings.
*
* @param db
* the repository to read settings from. The repository is not
* retained by the new configuration, instead its settings are
* copied during the constructor.
* @since 5.1.4
*/
public TransferConfig(Repository db) {
this(db.getConfig()); this(db.getConfig());
} }
/**
* Create a configuration honoring settings in a
* {@link org.eclipse.jgit.lib.Config}.
*
* @param rc
* the source to read settings from. The source is not retained
* by the new configuration, instead its settings are copied
* during the constructor.
* @since 5.1.4
*/
@SuppressWarnings("nls") @SuppressWarnings("nls")
TransferConfig(Config rc) { public TransferConfig(Config rc) {
boolean fsck = rc.getBoolean("transfer", "fsckobjects", false); boolean fsck = rc.getBoolean("transfer", "fsckobjects", false);
fetchFsck = rc.getBoolean("fetch", "fsckobjects", fsck); fetchFsck = rc.getBoolean("fetch", "fsckobjects", fsck);
receiveFsck = rc.getBoolean("receive", "fsckobjects", fsck); receiveFsck = rc.getBoolean("receive", "fsckobjects", fsck);