pxb1988/dex2jar · error · RuntimeException

can't pase string

Error message

can't pase string

What it means

A generic guard in findString: while unescaping a smali/dex string literal the escape scanner (handling \\, \', \uXXXX and up to 3 octal digits) walked past the end of the input or hit a character sequence that does not form a valid escape, so the literal cannot be parsed. The faulting input is the string literal being decoded.

Solutions

  1. Check the string literal in the smali/dex input for a malformed escape (e.g. a trailing lone backslash or an incomplete \u sequence)
  2. If the file was edited by hand, quote or fix the escape and regenerate
  3. If the literal comes from a third-party dex, verify the file is not truncated or corrupted — re-obtain the original APK/DEX
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at d2j-smali/src/main/java/com/googlecode/d2j/smali/Utils.java:339 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of pxb1988/dex2jar@b5bda4fb49 (2026-09-08). Data as JSON: /api/errors/8a437ae3346e8718. Report an issue: GitHub.

Appendix: source

Thrown at d2j-smali/src/main/java/com/googlecode/d2j/smali/Utils.java:339

                    case '\'':
                    case '\\':
                        i += 2;
                        break;
                    case 'u':
                        i += 6;
                        break;
                    default:
                        int x = 0;
                        while (x < 3) {
                            char e = str.charAt(i + 1 + x);
                            if (e >= '0' && e <= '7') {
                                x++;
                            } else {
                                break;
                            }
                        }
                        if (x == 0) {
                            throw new RuntimeException("can't pase string");
                        }
                        i += 1 + x;
                }

            } else {
                if (c == dEnd) {
                    return i;
                }
                i++;
            }
        }
        return end;
    }

    public static String unEscape0(String str, int start, int end) {

        StringBuilder sb = new StringBuilder();
        for (int i = start; i < end; ) {

View on GitHub (pinned to b5bda4fb49)