google / google/smali

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

Open
#64 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
400
Forks
67
Avg merge
1d 2h
Merged PRs (30d)
1

Description

reason is:

```java
private int writeDebugItem(@Nonnull DexDataWriter writer,
@Nullable Iterable parameterNames,
@Nullable Iterable 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.

```java
public class TransformedIterator
implements Iterator, Iterable {
final Iterator backingIterator;
final Function transformFunction;

public TransformedIterator(Iterable backingIterable,
Function transformFunction) {
this.backingIterator = backingIterable.iterator();
this.transformFunction = transformFunction;
}

public TransformedIterator(Iterator backingIterator,
Function 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 iterator() {
return this;
}
}
```

It can be used only once.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.