jacorb/jacorb-2.3.1-read_boolean.patch
2020-09-02 18:04:22 +08:00

96 lines
3.1 KiB
Diff

# read_boolean() now only adjusts positions if the chunk_end_pos == pos, no longer calling
# handle_chunking(). The problem with handle_chunking() is that it aligns the current position
# and this can cause CDRInputStream to "skip" valid boolean values, as those are not padded.
--- src/org/jacorb/orb/CDRInputStream.java 2009-05-03 18:35:54.000000000 -0300
+++ src/org/jacorb/orb/CDRInputStream.java 2009-07-27 21:43:13.654728303 -0300
@@ -460,51 +460,52 @@
private final void handle_chunking()
{
- int remainder = 4 - (index % 4);
- int aligned_pos = (remainder != 4) ? pos + remainder : pos;
+ int remainder = 4 - (this.index % 4);
+ int aligned_pos = (remainder != 4) ? this.pos + remainder : this.pos;
- if (chunk_end_pos >= pos && chunk_end_pos <= aligned_pos)
+ if (this.chunk_end_pos >= pos && this.chunk_end_pos <= aligned_pos)
{
- chunk_end_pos = -1;
- int saved_pos = pos;
- int saved_index = index;
- int tag = read_long();
+ this.adjust_positions();
+ }
+ }
- if (tag < 0) {
+ private final void adjust_positions()
+ {
+ this.chunk_end_pos = -1;
+ int saved_pos = this.pos;
+ int saved_index = this.index;
+ int tag = this.read_long();
+ if (tag < 0)
+ {
// tag is an end tag
-
- if (-tag > valueNestingLevel)
+ if (-tag > this.valueNestingLevel)
{
throw new INTERNAL
(
"received end tag " + tag +
" with value nesting level " +
- valueNestingLevel
+ this.valueNestingLevel
);
}
- valueNestingLevel = -tag;
- valueNestingLevel--;
-
- if (valueNestingLevel > 0)
+ this.valueNestingLevel = -tag;
+ this.valueNestingLevel--;
+ if (this.valueNestingLevel > 0)
{
- chunk_end_pos = pos;
- handle_chunking();
+ this.chunk_end_pos = pos;
+ this.handle_chunking();
}
}
else if (tag > 0 && tag < 0x7fffff00)
{
// tag is the chunk size tag of another chunk
-
- chunk_end_pos = pos + tag;
+ this.chunk_end_pos = this.pos + tag;
}
else // (tag == 0 || tag >= 0x7fffff00)
{
// tag is the null value tag or the value tag of a nested value
-
- pos = saved_pos; // "unread" the tag
- index = saved_index;
- }
+ this.pos = saved_pos; // "unread" the tag
+ this.index = saved_index;
}
}
@@ -711,7 +712,11 @@
public final boolean read_boolean()
{
- handle_chunking();
+ // handle_chunking();
+ if (this.chunk_end_pos == this.pos)
+ {
+ this.adjust_positions();
+ }
index++;
byte value = buffer[pos++];