Fix use-after-free bug in AbstractMap.remove()

Fixes issue 7856.

Change-Id: I4d3d92d7aaf13e499c8e12b680ecae66864f8a3a
Review-Link: https://gwt-review.googlesource.com/#/c/1740/

Review by: goktug@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11461 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/util/AbstractMap.java b/user/super/com/google/gwt/emul/java/util/AbstractMap.java
index 93606f5..bdeb8ee 100644
--- a/user/super/com/google/gwt/emul/java/util/AbstractMap.java
+++ b/user/super/com/google/gwt/emul/java/util/AbstractMap.java
@@ -207,6 +207,7 @@
       K k = entry.getKey();
       if (key == null ? k == null : key.equals(k)) {
         if (remove) {
+          entry = new MapEntryImpl<K, V>(entry.getKey(), entry.getValue());
           iter.remove();
         }
         return entry;