@@ -164,16 +164,18 @@ next(pb_cursor_t *cursor) {
164164 }
165165
166166 /* Cleanup and return */
167- pb_buffer_destroy (& buffer );
168167 pb_stream_destroy (& stream );
168+ pb_buffer_destroy (& buffer );
169169 return !packed -> end ;
170170 }
171171
172- /* Cleanup and invalidate cursor */
173- pb_buffer_destroy (& buffer );
174- pb_stream_destroy (& stream );
175- if (!cursor -> error )
172+ /* Invalidate cursor if at end */
173+ if (!(pb_stream_left (& stream ) && cursor -> error ))
176174 cursor -> error = PB_ERROR_EOM ;
175+
176+ /* Cleanup and return */
177+ pb_stream_destroy (& stream );
178+ pb_buffer_destroy (& buffer );
177179 return 0 ;
178180}
179181
@@ -289,7 +291,7 @@ pb_cursor_next(pb_cursor_t *cursor) {
289291 assert (cursor );
290292 int result = 0 ;
291293 if (pb_cursor_valid (cursor )) {
292- cursor -> error = pb_cursor_align (cursor );
294+ pb_cursor_align (cursor );
293295 do {
294296 result = cursor -> current .packed .end
295297 ? next_packed (cursor )
@@ -531,9 +533,8 @@ pb_cursor_align(pb_cursor_t *cursor) {
531533 assert (pb_cursor_valid (cursor ));
532534 pb_error_t error = PB_ERROR_NONE ;
533535
534- /* Check, if current part is already aligned */
535- const pb_part_t * part = pb_message_part (& (cursor -> message ));
536- if (unlikely_ (!pb_part_aligned (part ))) {
536+ /* Check, if cursor is already aligned */
537+ if (unlikely_ (!pb_cursor_aligned (cursor ))) {
537538 pb_version_t version = pb_cursor_version (cursor );
538539
539540 /* Align current packed context offset, if given */
0 commit comments