Access fragments safely

This commit is contained in:
Keith Winstein
2011-08-12 04:09:54 -04:00
parent 14667da4f5
commit c7199ec39d
+5 -4
View File
@@ -69,13 +69,14 @@ bool FragmentAssembly::add_fragment( Instruction &inst )
fragments.clear(); fragments.clear();
current_template = inst; current_template = inst;
fragments.resize( real_fragment_num + 1 ); fragments.resize( real_fragment_num + 1 );
fragments[ real_fragment_num ] = inst; fragments.at( real_fragment_num ) = inst;
fragments_arrived = 1; fragments_arrived = 1;
fragments_total = -1; fragments_total = -1;
} else { /* not a new packet */ } else { /* not a new packet */
/* see if we already have this fragment */ /* see if we already have this fragment */
if ( fragments[ real_fragment_num ].old_num != uint64_t(-1) ) { if ( (fragments.size() > real_fragment_num)
assert( fragments[ real_fragment_num ] == inst ); && (fragments.at( real_fragment_num ).old_num != uint64_t(-1)) ) {
assert( fragments.at( real_fragment_num ) == inst );
} else { } else {
if ( fragments_total == -1 ) { if ( fragments_total == -1 ) {
fragments.resize( real_fragment_num + 1 ); fragments.resize( real_fragment_num + 1 );
@@ -102,7 +103,7 @@ Instruction FragmentAssembly::get_assembly( void )
ret.diff = ""; ret.diff = "";
for ( int i = 0; i < fragments_total; i++ ) { for ( int i = 0; i < fragments_total; i++ ) {
ret.diff += fragments[ i ].diff; ret.diff += fragments.at( i ).diff;
} }
return ret; return ret;