Skip to content

Commit 350e84f

Browse files
committed
refactoring
1 parent 739afcb commit 350e84f

File tree

2 files changed

+25
-21
lines changed

2 files changed

+25
-21
lines changed

jbbp/src/main/java/com/igormaznitsa/jbbp/utils/JBBPUtils.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import java.util.Collections;
4040
import java.util.List;
4141
import java.util.Locale;
42-
import java.util.concurrent.atomic.AtomicInteger;
42+
import java.util.concurrent.atomic.AtomicLong;
4343

4444
/**
4545
* Misc auxiliary methods to be used in the framework.
@@ -1135,13 +1135,13 @@ public static void traceData(final InputStream inStream,
11351135
*
11361136
* @param script script to be processed, must not be null
11371137
* @param customFieldTypeProcessor custom field type processor if needed, can be null if no custom types in use
1138-
* @return detected biggest static array size with embedded structure awareness
1138+
* @return calculated biggest static array size with embedded structure awareness
11391139
* @since 3.0.0
11401140
*/
1141-
public static int findMaxStaticArraySize(final String script,
1141+
public static long findMaxStaticArraySize(final String script,
11421142
final JBBPCustomFieldTypeProcessor customFieldTypeProcessor) {
11431143

1144-
final AtomicInteger maxFound = new AtomicInteger(0);
1144+
final AtomicLong maxFound = new AtomicLong();
11451145
final JBBPCompiledBlock compiledBlock =
11461146
JBBPParser.prepare(script, customFieldTypeProcessor).getCompiledBlock();
11471147
final List<Integer> structSizeStack = new ArrayList<>();
@@ -1157,7 +1157,7 @@ private Integer extractStaticArraySize(int compiledBlockOffset,
11571157
}
11581158

11591159
private void processSize(final int size) {
1160-
int accum = size;
1160+
long accum = size;
11611161
for (Integer i : structSizeStack) {
11621162
accum = Math.multiplyExact(accum, i);
11631163
}

jbbp/src/test/java/com/igormaznitsa/jbbp/utils/JBBPUtilsTest.java

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,37 +47,40 @@ public class JBBPUtilsTest {
4747

4848
@Test
4949
public void testFindMaxStaticArraySize() {
50-
assertEquals(0, findMaxStaticArraySize("byte [_] a;", null));
51-
assertEquals(1, findMaxStaticArraySize("byte [1] a;", null));
52-
assertEquals(0, findMaxStaticArraySize("byte a; byte [a] b;", null));
53-
assertEquals(112, findMaxStaticArraySize("byte a; byte [a] b; int [112];", null));
54-
assertEquals(1120,
50+
assertEquals(0L, findMaxStaticArraySize("byte [_] a;", null));
51+
assertEquals(1L, findMaxStaticArraySize("byte [1] a;", null));
52+
assertEquals(0L, findMaxStaticArraySize("byte a; byte [a] b;", null));
53+
assertEquals(112L, findMaxStaticArraySize("byte a; byte [a] b; int [112];", null));
54+
assertEquals(1120L,
5555
findMaxStaticArraySize("byte a; byte [a] b; some [10] { int [112]; }", null));
56-
assertEquals(10230,
56+
assertEquals(10230L,
5757
findMaxStaticArraySize("byte a; byte [a] b; some [10] { int [112]; byte [1023] d;}",
5858
null));
59-
assertEquals(10230, findMaxStaticArraySize(
59+
assertEquals(10230L, findMaxStaticArraySize(
6060
"byte a; byte [a] b; some [10] { int [112]; j [_] {byte [1023] d;}}", null));
61-
assertEquals(65535, findMaxStaticArraySize("a [1]{ b[1]{ c[_]{byte[65535] a;}}}", null));
62-
assertEquals(65535,
61+
assertEquals(65535L, findMaxStaticArraySize("a [1]{ b[1]{ c[_]{byte[65535] a;}}}", null));
62+
assertEquals(65535L,
6363
findMaxStaticArraySize("a [1]{ b[1]{ c[_]{int [128] l; var[65535] a;}}}", null));
64-
assertEquals(65535,
64+
assertEquals(65535L,
6565
findMaxStaticArraySize("a [1]{ b[1]{ c[_]{int [128] l; var[65535] a;}}}", null));
66-
assertEquals(65535,
66+
assertEquals(65535L,
6767
findMaxStaticArraySize("a [1]{ b[1]{ c[_]{int [128] l; stringj[65535] a;}}}", null));
68-
assertEquals(65535,
68+
assertEquals(65535L,
6969
findMaxStaticArraySize("a [1]{ b[1]{ c[_]{int [128] l; floatj[65535] a;}}}", null));
70-
assertEquals(273948,
70+
assertEquals(273948L,
7171
findMaxStaticArraySize(
7272
"a [1]{ b[1]{ c[_]{int [128] l; str [222] { ubyte [1234] p; } doublej[65535] a;}}}",
7373
null));
74-
assertEquals(273948,
74+
assertEquals(273948L,
7575
findMaxStaticArraySize(
7676
"a [1]{ b[1]{ c[_]{int [128] l; str [222] { bit:3 [1234] p; } doublej[65535] a;}}}",
7777
null));
78-
assertEquals(65535,
78+
assertEquals(65535L,
7979
findMaxStaticArraySize(
8080
"a [1]{ b[1]{ c[_]{int [128] l; str [222] { val:3 p; } doublej[65535] a;}}}", null));
81+
assertEquals(288217182213504000L,
82+
findMaxStaticArraySize(
83+
"a [65535] { b [65535] { c [65535] { byte [1024]d; }}}", null));
8184
assertEquals(65535, findMaxStaticArraySize(
8285
"a [1]{ b[1]{ lala [65534] { long s; } c[1]{int [128] l; cus[65535] a;}}}",
8386
new JBBPCustomFieldTypeProcessor() {
@@ -103,7 +106,8 @@ public JBBPAbstractField readCustomFieldType(JBBPBitInputStream in, JBBPBitOrder
103106
}
104107
}));
105108
assertThrows(ArithmeticException.class,
106-
() -> findMaxStaticArraySize("a [_]{ b[65535]{ c[65535]{byte[65535] a;}}}", null));
109+
() -> findMaxStaticArraySize(
110+
"a [_]{ b[65535]{ c[65535]{byte[65535] { byte [10000000] d;}}}}", null));
107111
}
108112

109113
@Test

0 commit comments

Comments
 (0)