aboutsummaryrefslogtreecommitdiff
path: root/src/org/gnunet/construct/parsers/FillParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/gnunet/construct/parsers/FillParser.java')
-rw-r--r--src/org/gnunet/construct/parsers/FillParser.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/org/gnunet/construct/parsers/FillParser.java b/src/org/gnunet/construct/parsers/FillParser.java
index b8e4b43..b266424 100644
--- a/src/org/gnunet/construct/parsers/FillParser.java
+++ b/src/org/gnunet/construct/parsers/FillParser.java
@@ -62,10 +62,15 @@ public class FillParser implements Parser {
62 public int parse(ByteBuffer srcBuf, int frameOffset, 62 public int parse(ByteBuffer srcBuf, int frameOffset,
63 Message frameObj, final Message dstObj, List<Field> frameSizePath) { 63 Message frameObj, final Message dstObj, List<Field> frameSizePath) {
64 64
65
66
65 final int frameSize = ReflectUtil.justGetInt(dstObj, frameSizePath); 67 final int frameSize = ReflectUtil.justGetInt(dstObj, frameSizePath);
66 int remaining = frameOffset + frameSize - srcBuf.position(); 68 int remaining = frameOffset + frameSize - srcBuf.position();
67 int size = 0; 69 int size = 0;
68 70
71 Class<?> elemType = targetField.getType().getComponentType();
72
73
69 ArrayList<Message> list = new ArrayList<Message>(10); 74 ArrayList<Message> list = new ArrayList<Message>(10);
70 75
71 while (remaining > 0) { 76 while (remaining > 0) {
@@ -74,10 +79,13 @@ public class FillParser implements Parser {
74 int s = elemParser.parse(srcBuf, frameOffset, frameObj, next, null); 79 int s = elemParser.parse(srcBuf, frameOffset, frameObj, next, null);
75 size += s; 80 size += s;
76 remaining -= s; 81 remaining -= s;
82 list.add(next);
77 } 83 }
78 84
85 Object arr = Array.newInstance(elemType, list.size());
86
79 try { 87 try {
80 targetField.set(dstObj, list.toArray()); 88 targetField.set(dstObj, list.toArray((Object[]) arr));
81 } catch (IllegalAccessException e) { 89 } catch (IllegalAccessException e) {
82 throw new AssertionError("cannot access field"); 90 throw new AssertionError("cannot access field");
83 } 91 }