summaryrefslogtreecommitdiff
path: root/dev-java/commons-compress/files/commons-compress-1.21-asm7+.patch
blob: e20fa89787dcf8c0ea8dd9d51a619dc7e37fbb15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
From 7709c8be97147e8d5c5d7fa42d076504931ba9e0 Mon Sep 17 00:00:00 2001
From: Stephan Blecher <token_github@blecher.at>
Date: Tue, 10 Aug 2021 14:39:21 +0200
Subject: [PATCH] COMPRESS-582: update harmony to ASM >= 7.0

---
 pom.xml                                       |  5 +--
 .../harmony/pack200/Pack200ClassReader.java   |  2 +-
 .../compress/harmony/pack200/Segment.java     | 35 +++++++++++++++----
 .../harmony/pack200/tests/ArchiveTest.java    |  0
 4 files changed, 32 insertions(+), 10 deletions(-)
 mode change 100644 => 100755 src/test/java/org/apache/commons/compress/harmony/pack200/tests/ArchiveTest.java

diff --git a/pom.xml b/pom.xml
index 28f50f06a..1c6844d24 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,7 @@ Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj.
     <commons.jacoco.version>0.8.7</commons.jacoco.version>
     <commons.japicmp.version>0.15.3</commons.japicmp.version>
     <commons.javadoc.version>3.3.0</commons.javadoc.version>
+    <asm.version>7.0</asm.version>
   </properties>
 
   <issueManagement>
@@ -119,9 +120,9 @@ Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj.
 
     <!-- Pack200 -->
     <dependency>
-      <groupId>asm</groupId>
+      <groupId>org.ow2.asm</groupId>
       <artifactId>asm</artifactId>
-      <version>3.2</version>
+      <version>${asm.version}</version>
       <optional>true</optional>
     </dependency>
 
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/Pack200ClassReader.java b/src/main/java/org/apache/commons/compress/harmony/pack200/Pack200ClassReader.java
index 2a017bc01..7022b7b30 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/Pack200ClassReader.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/Pack200ClassReader.java
@@ -40,7 +40,7 @@ public int readUnsignedShort(final int index) {
         // Doing this to check whether last load-constant instruction was ldc (18) or ldc_w (19)
         // TODO: Assess whether this impacts on performance
         final int unsignedShort = super.readUnsignedShort(index);
-        if (b[index - 1] == 19) {
+        if (index > 0 && b[index - 1] == 19) {
             lastUnsignedShort = unsignedShort;
         } else {
             lastUnsignedShort = Short.MIN_VALUE;
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java b/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
index 0609aa4c2..1bc73a018 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
@@ -32,12 +32,20 @@
 import org.objectweb.asm.FieldVisitor;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
 
+
 /**
  * A Pack200 archive consists of one or more Segments.
  */
-public class Segment implements ClassVisitor {
+public class Segment extends ClassVisitor {
+
+     public static int ASM_API = Opcodes.ASM4; /* see https://asm.ow2.io/javadoc/org/objectweb/asm/Opcodes.html#ASM4 */
+     
+    public Segment() {
+        super(ASM_API);
+    }
 
     private SegmentHeader segmentHeader;
     private CpBands cpBands;
@@ -255,8 +263,12 @@ public void visitEnd() {
      *
      * It delegates to BcBands for bytecode related visits and to ClassBands for everything else.
      */
-    public class SegmentMethodVisitor implements MethodVisitor {
-
+    public class SegmentMethodVisitor extends MethodVisitor {
+        
+        public SegmentMethodVisitor() {
+            super(ASM_API);
+        }
+        
         @Override
         public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
             return new SegmentAnnotationVisitor(MetadataBandGroup.CONTEXT_METHOD, desc, visible);
@@ -427,7 +439,7 @@ public ClassBands getClassBands() {
     /**
      * SegmentAnnotationVisitor implements <code>AnnotationVisitor</code> to visit Annotations found in a class file.
      */
-    public class SegmentAnnotationVisitor implements AnnotationVisitor {
+    public class SegmentAnnotationVisitor extends AnnotationVisitor {
 
         private int context = -1;
         private int parameter = -1;
@@ -443,17 +455,20 @@ public ClassBands getClassBands() {
         private final List nestPairN = new ArrayList();
 
         public SegmentAnnotationVisitor(final int context, final String desc, final boolean visible) {
+            super(ASM_API);
             this.context = context;
             this.desc = desc;
             this.visible = visible;
         }
 
         public SegmentAnnotationVisitor(final int context) {
+            super(ASM_API);
             this.context = context;
         }
 
         public SegmentAnnotationVisitor(final int context, final int parameter, final String desc,
             final boolean visible) {
+            super(ASM_API);
             this.context = context;
             this.parameter = parameter;
             this.desc = desc;
@@ -478,7 +493,7 @@ public AnnotationVisitor visitAnnotation(String name, final String desc) {
             nameRU.add(name);
             nestTypeRS.add(desc);
             nestPairN.add(Integer.valueOf(0));
-            return new AnnotationVisitor() {
+            return new AnnotationVisitor(context, av) {
                 @Override
                 public void visit(final String name, final Object value) {
                     final Integer numPairs = (Integer) nestPairN.remove(nestPairN.size() - 1);
@@ -552,7 +567,7 @@ public void visitEnum(String name, final String desc, final String value) {
         }
     }
 
-    public class ArrayVisitor implements AnnotationVisitor {
+    public class ArrayVisitor extends AnnotationVisitor {
 
         private final int indexInCaseArrayN;
         private final List caseArrayN;
@@ -561,6 +576,8 @@ public void visitEnum(String name, final String desc, final String value) {
         private final List T;
 
         public ArrayVisitor(final List caseArrayN, final List T, final List nameRU, final List values) {
+            super(ASM_API);
+
             this.caseArrayN = caseArrayN;
             this.T = T;
             this.nameRU = nameRU;
@@ -612,7 +629,11 @@ public void visitEnum(final String name, final String desc, final String value)
      * SegmentFieldVisitor implements <code>FieldVisitor</code> to visit the metadata relating to fields in a class
      * file.
      */
-    public class SegmentFieldVisitor implements FieldVisitor {
+    public class SegmentFieldVisitor extends FieldVisitor {
+
+        public SegmentFieldVisitor() {
+            super(ASM_API);
+        }
 
         @Override
         public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
diff --git a/src/test/java/org/apache/commons/compress/harmony/pack200/tests/ArchiveTest.java b/src/test/java/org/apache/commons/compress/harmony/pack200/tests/ArchiveTest.java
old mode 100644
new mode 100755