You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by li...@apache.org on 2022/09/09 14:57:31 UTC
[tomcat] branch main updated: Avoid potential ConcurrentModificationException by using Iterator.
This is an automated email from the ASF dual-hosted git repository.
lihan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push:
new 5c5adba7fd Avoid potential ConcurrentModificationException by using Iterator.
5c5adba7fd is described below
commit 5c5adba7fdfc02ddaaf3a229efce89852bc305ae
Author: lihan <li...@apache.org>
AuthorDate: Fri Sep 9 22:57:17 2022 +0800
Avoid potential ConcurrentModificationException by using Iterator.
---
.../apache/catalina/servlets/WebdavServlet.java | 36 +++++++++++++---------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java
index 54c4d0df78..97619c7e25 100644
--- a/java/org/apache/catalina/servlets/WebdavServlet.java
+++ b/java/org/apache/catalina/servlets/WebdavServlet.java
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
+import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Stack;
@@ -1293,9 +1294,11 @@ public class WebdavServlet extends DefaultServlet {
if (lock != null) {
// At least one of the tokens of the locks must have been given
- for (String token : lock.tokens) {
+ Iterator<String> tokenList = lock.tokens.iterator();
+ while (tokenList.hasNext()) {
+ String token = tokenList.next();
if (lockTokenHeader.contains(token)) {
- lock.tokens.remove(token);
+ tokenList.remove();
}
}
@@ -1308,17 +1311,20 @@ public class WebdavServlet extends DefaultServlet {
}
// Checking inheritable collection locks
- for (LockInfo collectionLock : collectionLocks) {
- if (path.equals(collectionLock.path)) {
- for (String token : collectionLock.tokens) {
+ Iterator<LockInfo> collectionLocksList = collectionLocks.iterator();
+ while (collectionLocksList.hasNext()) {
+ lock = collectionLocksList.next();
+ if (path.equals(lock.path)) {
+ Iterator<String> tokenList = lock.tokens.iterator();
+ while (tokenList.hasNext()) {
+ String token = tokenList.next();
if (lockTokenHeader.contains(token)) {
- collectionLock.tokens.remove(token);
+ tokenList.remove();
break;
}
}
-
- if (collectionLock.tokens.isEmpty()) {
- collectionLocks.remove(collectionLock);
+ if (lock.tokens.isEmpty()) {
+ collectionLocksList.remove();
// Removing any lock-null resource which would be present
lockNullResources.remove(path);
}
@@ -1392,12 +1398,14 @@ public class WebdavServlet extends DefaultServlet {
}
// Checking inheritable collection locks
- for (LockInfo collectionsLock : collectionLocks) {
- if (collectionsLock.hasExpired()) {
- collectionLocks.remove(collectionsLock);
- } else if (path.startsWith(collectionsLock.path)) {
+ Iterator<LockInfo> collectionLockList = collectionLocks.iterator();
+ while (collectionLockList.hasNext()) {
+ lock = collectionLockList.next();
+ if (lock.hasExpired()) {
+ collectionLockList.remove();
+ } else if (path.startsWith(lock.path)) {
boolean tokenMatch = false;
- for (String token : collectionsLock.tokens) {
+ for (String token : lock.tokens) {
if (ifHeader.contains(token)) {
tokenMatch = true;
break;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: [tomcat] branch main updated: Avoid potential ConcurrentModificationException by using Iterator.
Posted by Mark Thomas <ma...@apache.org>.
On 09/09/2022 15:57, lihan@apache.org wrote:
> This is an automated email from the ASF dual-hosted git repository.
>
> lihan pushed a commit to branch main
> in repository https://gitbox.apache.org/repos/asf/tomcat.git
>
>
> The following commit(s) were added to refs/heads/main by this push:
> new 5c5adba7fd Avoid potential ConcurrentModificationException by using Iterator.
> 5c5adba7fd is described below
>
> commit 5c5adba7fdfc02ddaaf3a229efce89852bc305ae
> Author: lihan <li...@apache.org>
> AuthorDate: Fri Sep 9 22:57:17 2022 +0800
>
> Avoid potential ConcurrentModificationException by using Iterator.
Thanks for catching these.
Mark
> ---
> .../apache/catalina/servlets/WebdavServlet.java | 36 +++++++++++++---------
> 1 file changed, 22 insertions(+), 14 deletions(-)
>
> diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java
> index 54c4d0df78..97619c7e25 100644
> --- a/java/org/apache/catalina/servlets/WebdavServlet.java
> +++ b/java/org/apache/catalina/servlets/WebdavServlet.java
> @@ -30,6 +30,7 @@ import java.util.Collections;
> import java.util.Date;
> import java.util.HashMap;
> import java.util.List;
> +import java.util.Iterator;
> import java.util.Locale;
> import java.util.Map;
> import java.util.Stack;
> @@ -1293,9 +1294,11 @@ public class WebdavServlet extends DefaultServlet {
> if (lock != null) {
>
> // At least one of the tokens of the locks must have been given
> - for (String token : lock.tokens) {
> + Iterator<String> tokenList = lock.tokens.iterator();
> + while (tokenList.hasNext()) {
> + String token = tokenList.next();
> if (lockTokenHeader.contains(token)) {
> - lock.tokens.remove(token);
> + tokenList.remove();
> }
> }
>
> @@ -1308,17 +1311,20 @@ public class WebdavServlet extends DefaultServlet {
> }
>
> // Checking inheritable collection locks
> - for (LockInfo collectionLock : collectionLocks) {
> - if (path.equals(collectionLock.path)) {
> - for (String token : collectionLock.tokens) {
> + Iterator<LockInfo> collectionLocksList = collectionLocks.iterator();
> + while (collectionLocksList.hasNext()) {
> + lock = collectionLocksList.next();
> + if (path.equals(lock.path)) {
> + Iterator<String> tokenList = lock.tokens.iterator();
> + while (tokenList.hasNext()) {
> + String token = tokenList.next();
> if (lockTokenHeader.contains(token)) {
> - collectionLock.tokens.remove(token);
> + tokenList.remove();
> break;
> }
> }
> -
> - if (collectionLock.tokens.isEmpty()) {
> - collectionLocks.remove(collectionLock);
> + if (lock.tokens.isEmpty()) {
> + collectionLocksList.remove();
> // Removing any lock-null resource which would be present
> lockNullResources.remove(path);
> }
> @@ -1392,12 +1398,14 @@ public class WebdavServlet extends DefaultServlet {
> }
>
> // Checking inheritable collection locks
> - for (LockInfo collectionsLock : collectionLocks) {
> - if (collectionsLock.hasExpired()) {
> - collectionLocks.remove(collectionsLock);
> - } else if (path.startsWith(collectionsLock.path)) {
> + Iterator<LockInfo> collectionLockList = collectionLocks.iterator();
> + while (collectionLockList.hasNext()) {
> + lock = collectionLockList.next();
> + if (lock.hasExpired()) {
> + collectionLockList.remove();
> + } else if (path.startsWith(lock.path)) {
> boolean tokenMatch = false;
> - for (String token : collectionsLock.tokens) {
> + for (String token : lock.tokens) {
> if (ifHeader.contains(token)) {
> tokenMatch = true;
> break;
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org