Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Out of bounds error on incomple function default parameters #520

Open
the-horo opened this issue Aug 11, 2024 · 0 comments
Open

Out of bounds error on incomple function default parameters #520

the-horo opened this issue Aug 11, 2024 · 0 comments

Comments

@the-horo
Copy link

Trying to parse the code void foo(int s = is causing an out-of-bounds error:

core.exception.ArrayIndexError@/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d(9104): index [6] is out of bounds for array of length 6
----------------
??:? onArrayIndexError [0x7f0e1e4139be]
??:? _d_arraybounds_indexp [0x7f0e1e413fff]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:9104 const pure nothrow @property @nogc @safe std.experimental.lexer.TokenStructure!(ubyte, "import dparse.lexer:TokenTriviaFields,TriviaToken; mixin TokenTriviaFields;").TokenStructure dparse.parser.Parser.current() [0x565523b92951]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:7325 dparse.ast.TemplateValueParameterDefault dparse.parser.Parser.parseTemplateValueParameterDefault() [0x565523b8d125]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:7295 dparse.ast.TemplateValueParameter dparse.parser.Parser.parseTemplateValueParameter() [0x565523b8d026]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:7112 dparse.ast.TemplateParameter dparse.parser.Parser.parseTemplateParameter() [0x565523b8c56c]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:8821 dparse.ast.TemplateParameterList dparse.parser.Parser.parseCommaSeparatedRule!(dparse.ast.TemplateParameterList, dparse.ast.TemplateParameter, false).parseCommaSeparatedRule(bool) [0x565523b9afb3]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:7132 dparse.ast.TemplateParameterList dparse.parser.Parser.parseTemplateParameterList() [0x565523b8c61d]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:7148 dparse.ast.TemplateParameters dparse.parser.Parser.parseTemplateParameters() [0x565523b8c686]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:2669 dparse.ast.Declarator dparse.parser.Parser.parseDeclarator() [0x565523b7d7bc]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:8107 dparse.ast.VariableDeclaration dparse.parser.Parser.parseVariableDeclaration(dparse.ast.Type, bool) [0x565523b8fb17]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:2492 dparse.ast.Declaration dparse.parser.Parser.parseDeclaration(bool, bool, bool) [0x565523b7ca7e]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:5046 dparse.ast.Module dparse.parser.Parser.parseModule() [0x565523b85a51]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:71 dparse.ast.Module dparse.parser.parseModule!().parseModule(dparse.parser.ParserConfig) [0x565523b031c8]
/home/happy/.dub/packages/libdparse/~master/libdparse/src/dparse/parser.d:100 dparse.ast.Module dparse.parser.parseModule!().parseModule(const(std.experimental.lexer.TokenStructure!(ubyte, "import dparse.lexer:TokenTriviaFields,TriviaToken; mixin TokenTriviaFields;").TokenStructure)[], immutable(char)[], dparse.rollback_allocator.RollbackAllocator*, , uint*, uint*) [0x565523b0314d]
./a.d:23 _Dmain [0x565523aff767]
Error Program exited with code 1

The above stack trace is from the modified README example below:

/+dub.sdl:
dependency "libdparse" version="~master"
+/
import dparse.ast;
import std.stdio, std.range;

class TestVisitor : ASTVisitor {}

void main()
{
    import dparse.lexer;
    import dparse.parser : parseModule;
    import dparse.rollback_allocator : RollbackAllocator;

    auto sourceCode = q{
        void foo(int s =
    };
    LexerConfig config;
    auto cache = StringCache(StringCache.defaultBucketCount);
    auto tokens = getTokensForParser(sourceCode, config, &cache);

    RollbackAllocator rba;
    auto m = parseModule(tokens, "test.d", &rba);
    auto visitor = new TestVisitor();
    visitor.visit(m);
}

I hit this in serve-d when it crashed after I saved an incomplete buffer that contained the snippet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant