diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java index 22d27ac0d0..d0f08dd163 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java @@ -1596,6 +1596,14 @@ public class AccountIT extends AbstractDaemonTest { ImmutableList.of(key2.getKeyIdString())); } + @Test + public void addMalformedGpgKey() throws Exception { + String key = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\ntest\n-----END PGP PUBLIC KEY BLOCK-----"; + exception.expect(BadRequestException.class); + exception.expectMessage("Failed to parse GPG keys"); + addGpgKey(key); + } + @Test @UseSsh public void sshKeys() throws Exception { diff --git a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/PostGpgKeys.java b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/PostGpgKeys.java index 7d1aceedf6..d725e72d2d 100644 --- a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/PostGpgKeys.java +++ b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/PostGpgKeys.java @@ -66,6 +66,7 @@ import org.bouncycastle.bcpg.ArmoredInputStream; import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKeyRing; +import org.bouncycastle.openpgp.PGPRuntimeOperationException; import org.bouncycastle.openpgp.bc.BcPGPObjectFactory; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitBuilder; @@ -183,6 +184,8 @@ public class PostGpgKeys implements RestModifyView { "Cannot both add and delete key: " + keyToString(keyRing.getPublicKey())); } keyRings.add(keyRing); + } catch (PGPRuntimeOperationException e) { + throw new BadRequestException("Failed to parse GPG keys", e); } } return keyRings;