You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/05/13 14:20:23 UTC

[shardingsphere] branch master updated: ModShardingAlgorithm add Argument check for offset(#17605) (#17634)

This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 3134a81cc02 ModShardingAlgorithm add Argument check for offset(#17605) (#17634)
3134a81cc02 is described below

commit 3134a81cc023411034854390d39d9d7049b78bdb
Author: galaxy <ga...@tencent.com>
AuthorDate: Fri May 13 22:20:17 2022 +0800

    ModShardingAlgorithm add Argument check for offset(#17605) (#17634)
---
 .../sharding/algorithm/sharding/mod/ModShardingAlgorithm.java      | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
index 32e322344f8..70329bcf2c6 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
@@ -129,9 +129,16 @@ public final class ModShardingAlgorithm implements StandardShardingAlgorithm<Com
     }
     
     private BigInteger cutShardingValue(final Comparable<?> shardingValue) {
+        checkOffsetArgument(shardingValue);
         return 0 == startOffset && 0 == stopOffset ? getBigInteger(shardingValue) : new BigInteger(shardingValue.toString().substring(startOffset, shardingValue.toString().length() - stopOffset));
     }
     
+    private void checkOffsetArgument(final Comparable<?> shardingValue) {
+        Preconditions.checkArgument(startOffset >= 0, "Start offset can not be less than 0.");
+        Preconditions.checkArgument(stopOffset >= 0, "Stop offset can not be less than 0.");
+        Preconditions.checkArgument(shardingValue.toString().length() - stopOffset > startOffset, "Sharding value subtract stop offset can not be less than start offset.");
+    }
+    
     private BigInteger getBigInteger(final Comparable<?> value) {
         return value instanceof Number ? BigInteger.valueOf(((Number) value).longValue()) : new BigInteger(value.toString());
     }