Skip to content

Bad index for debug_info_item parameter_name: 2ffffff >= 1e58 #64

@woxin123

Description

@woxin123

reason is:

private int writeDebugItem(@Nonnull DexDataWriter writer,
                           @Nullable Iterable<? extends StringKey> parameterNames,
                           @Nullable Iterable<? extends DebugItem> debugItems) throws IOException {
    int parameterCount = 0;
    int lastNamedParameterIndex = -1;
    if (parameterNames != null) {
        parameterCount = IteratorUtils.size(parameterNames);
        int index = 0;
        for (StringKey parameterName: parameterNames) {
            if (parameterName != null) {
                lastNamedParameterIndex = index;
            }
            index++;
        }
    }
    if (lastNamedParameterIndex == -1 && (debugItems == null 
            || !debugItems.iterator().hasNext())) {
        return NO_OFFSET;
    }
    int debugItemOffset = writer.getPosition();
    int startingLineNumber = 0;
    if (debugItems != null) {
        for (DebugItem debugItem: debugItems) {
            if (debugItem instanceof LineNumber) {
                startingLineNumber = ((LineNumber)debugItem).getLineNumber();
                break;
            }
        }
    }
    ByteArrayOutputStream tempByteOutput = new ByteArrayOutputStream();
    DexDataWriter tempDataWriter = new DexDataWriter(tempByteOutput, 0, 64);
    DebugWriter tempDebugWriter = new DebugWriter(stringSection, typeSection, tempDataWriter);
    tempDataWriter.writeUleb128(startingLineNumber);

The parameterNames type is is TransformedIterator.

public class TransformedIterator<F extends Object, T extends Object>
        implements Iterator<T>, Iterable<T> {
    final Iterator<? extends F> backingIterator;
    final Function<F, T> transformFunction;

    public TransformedIterator(Iterable<? extends F> backingIterable,
            Function<F, T> transformFunction) {
        this.backingIterator = backingIterable.iterator();
        this.transformFunction = transformFunction;
    }

    public TransformedIterator(Iterator<? extends F> backingIterator,
            Function<F, T> transformFunction) {
        this.backingIterator = backingIterator;
        this.transformFunction = transformFunction;
    }

    @Override
    public final boolean hasNext() {
        return backingIterator.hasNext();
    }

    @Override
    public final T next() {
        return transformFunction.apply(backingIterator.next());
    }

    @Override
    public final void remove() {
        backingIterator.remove();
    }

    @Override
    public final Iterator<T> iterator() {
        return this;
    }
}

It can be used only once.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions