Skip to content

Commit

Permalink
prohibit creation of invalid Symbols
Browse files Browse the repository at this point in the history
  • Loading branch information
vtjnash committed Jan 5, 2015
1 parent bc9c1fa commit 80988bc
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,8 @@ DLLEXPORT jl_sym_t *jl_symbol_n(const char *str, int32_t len)
char *name = (char*)alloca(len+1);
memcpy(name, str, len);
name[len] = '\0';
if (strlen(name) != len)
jl_error("Symbol name may not contain \\0");
return jl_symbol(name);
}

Expand Down Expand Up @@ -588,6 +590,8 @@ DLLEXPORT jl_sym_t *jl_tagged_gensym(const char *str, int32_t len)
memcpy(name+2, str, len);
n = uint2str(gs_name, sizeof(gs_name), gs_ctr, 10);
memcpy(name+3+len, n, sizeof(gs_name)-(n-gs_name));
if (strlen(name) != len+3+sizeof(gs_name)-(n-gs_name)-1)
jl_error("Symbol name may not contain \\0");
gs_ctr++;
return jl_symbol(name);
}
Expand Down
8 changes: 8 additions & 0 deletions test/strings.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1015,6 +1015,14 @@ let
@test parse("\udcdb = 1",1,raise=false)[1] == Expr(:error, "invalid character \"\udcdb\"")
end

@test symbol("asdf") === :asdf
@test startswith(string(gensym("asdf")),"##asdf#")
@test gensym("asdf") != gensym("asdf")
@test gensym() != gensym()
@test startswith(string(gensym()),"##")
@test_throws ErrorException symbol("ab\0")
@test_throws ErrorException gensym("ab\0")

# issue #6949
let f =IOBuffer(),
x = split("1 2 3")
Expand Down

0 comments on commit 80988bc

Please sign in to comment.