From c828f7415a40150f7fdee562d142762fccd843f4 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 5 Jun 2012 17:59:46 -0500 Subject: [PATCH 1/6] Migrate erlware_commons to rebar support --- Makefile | 17 ----------------- rebar.config | 3 +++ .../erlware_commons.app.src | 2 +- 3 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 Makefile create mode 100644 rebar.config rename ebin/erlware_commons.app => src/erlware_commons.app.src (96%) diff --git a/Makefile b/Makefile deleted file mode 100644 index b473d7f..0000000 --- a/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -ERLC=`which erlc` -BEAMDIR=./ebin -ERLCFLAGS=+debug_info -pa $(BEAMDIR) -SRCDIR=src - -.PHONY=all clean - -all: - @echo "Erlware Commons is maintained with Sinan, its much better to use " - @echo "sinan to build than this makefile. This is here just to get " - @echo "get you started." - $(ERLC) $(ERLCFLAGS) -o $(BEAMDIR) $(SRCDIR)/ec_dictionary.erl; - $(ERLC) $(ERLCFLAGS) -o $(BEAMDIR) $(SRCDIR)/*.erl ; - -clean: - rm $(BEAMDIR)/*.beam - rm -rf erl_crush.dump \ No newline at end of file diff --git a/rebar.config b/rebar.config new file mode 100644 index 0000000..27aa310 --- /dev/null +++ b/rebar.config @@ -0,0 +1,3 @@ +{erl_opts, + [debug_info, + warnings_as_errors]}. \ No newline at end of file diff --git a/ebin/erlware_commons.app b/src/erlware_commons.app.src similarity index 96% rename from ebin/erlware_commons.app rename to src/erlware_commons.app.src index 4c4b057..a10e939 100644 --- a/ebin/erlware_commons.app +++ b/src/erlware_commons.app.src @@ -1,7 +1,7 @@ %% -*- mode: Erlang; fill-column: 75; comment-column: 50; -*- {application, erlware_commons, [{description, "Additional standard library for Erlang"}, - {vsn, "0.6.2"}, + {vsn, "0.7.0"}, {modules, [ ec_talk, ec_lists, From 3e6357aea9d4bd8fdc7dc02abd294976cb1ec7b4 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 5 Jun 2012 17:54:12 -0500 Subject: [PATCH 2/6] add . files to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 55a8799..6846738 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.* _build erl_crash.dump *.pyc From 10557e421e6a85ff59439b0c21d23d3a5f036639 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 5 Jun 2012 17:54:46 -0500 Subject: [PATCH 3/6] make mkdtemp a lot more secure (still not fully secure but more). --- src/ec_file.erl | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ec_file.erl b/src/ec_file.erl index f4d9d88..f27b2ce 100644 --- a/src/ec_file.erl +++ b/src/ec_file.erl @@ -109,14 +109,21 @@ is_symlink(Path) -> %% function of the same name. -spec mkdtemp() -> TmpDirPath::path(). mkdtemp() -> - UniqueNumber = integer_to_list(element(3, now())), + random:seed(now()), + UniqueNumber = erlang:integer_to_list(erlang:trunc(random:uniform() * 1000000000000)), TmpDirPath = filename:join([tmp(), lists:flatten([".tmp_dir", UniqueNumber])]), - try - ok = mkdir_path(TmpDirPath), - TmpDirPath - catch - _C:E -> throw(?UEX({mkdtemp_failed, E}, ?CHECK_PERMS_MSG, [])) + + case filelib:is_dir(TmpDirPath) of + true -> + throw(?UEX({mkdtemp_failed, file_exists}, "tmp directory exists", [])); + false -> + try + ok = mkdir_path(TmpDirPath), + TmpDirPath + catch + _C:E -> throw(?UEX({mkdtemp_failed, E}, ?CHECK_PERMS_MSG, [])) + end end. From 261fb422f9e2144d36023e153518e7ca4febdb2c Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 5 Jun 2012 17:55:07 -0500 Subject: [PATCH 4/6] fix eunit tests so that they actually work and run --- src/ec_file.erl | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/src/ec_file.erl b/src/ec_file.erl index f27b2ce..f50695f 100644 --- a/src/ec_file.erl +++ b/src/ec_file.erl @@ -304,23 +304,20 @@ hex0(I) -> $0 + I. -include_lib("eunit/include/eunit.hrl"). setup_test() -> - case filelib:is_dir("/tmp/ec_file") of - true -> - remove("/tmp/ec_file", [recursive]); - false -> - ok - end, - mkdir_path("/tmp/ec_file/dir"), - ?assertMatch(false, is_symlink("/tmp/ec_file/dir")), - ?assertMatch(true, filelib:is_dir("/tmp/ec_file/dir")). - + Dir = mkdtemp(), + mkdir_path(Dir), + ?assertMatch(false, is_symlink(Dir)), + ?assertMatch(true, filelib:is_dir(Dir)). md5sum_test() -> ?assertMatch("cfcd208495d565ef66e7dff9f98764da", md5sum("0")). file_test() -> - TermFile = "/tmp/ec_file/dir/file.term", - TermFileCopy = "/tmp/ec_file/dircopy/file.term", + Dir = mkdtemp(), + TermFile = filename:join(Dir, "ec_file/dir/file.term"), + TermFileCopy = filename:join(Dir, "ec_file/dircopy/file.term"), + filelib:ensure_dir(TermFile), + filelib:ensure_dir(TermFileCopy), write_term(TermFile, "term"), ?assertMatch("term", consult(TermFile)), ?assertMatch(<<"\"term\". ">>, read(TermFile)), @@ -330,11 +327,12 @@ file_test() -> ?assertMatch("term", consult(TermFileCopy)). teardown_test() -> - remove("/tmp/ec_file", [recursive]), - ?assertMatch(false, filelib:is_dir("/tmp/ec_file")). + Dir = mkdtemp(), + remove(Dir, [recursive]), + ?assertMatch(false, filelib:is_dir(Dir)). setup_base_and_target() -> - {ok, BaseDir} = ewl_file:create_tmp_dir("/tmp"), + BaseDir = mkdtemp(), DummyContents = <<"This should be deleted">>, SourceDir = filename:join([BaseDir, "source"]), ok = file:make_dir(SourceDir), @@ -351,17 +349,12 @@ setup_base_and_target() -> find_test() -> %% Create a directory in /tmp for the test. Clean everything afterwards + {BaseDir, _SourceDir, {Name1, Name2, Name3, _NoName}} = setup_base_and_target(), + ?assertMatch([Name2, + Name3, + Name1], + find(BaseDir, "file[a-z]+\$")), + remove(BaseDir, [recursive]). - {setup, - fun setup_base_and_target/0, - fun ({BaseDir, _, _}) -> - ewl_file:delete_dir(BaseDir) - end, - fun ({BaseDir, _, {Name1, Name2, Name3, _}}) -> - ?assertMatch([Name2, - Name3, - Name1], - ewl_file:find(BaseDir, "file[a-z]+\$")) - end}. -endif. From b4eb83cf53fed2ce113e04c1cc21b64d62ca02c7 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 5 Jun 2012 17:56:45 -0500 Subject: [PATCH 5/6] make insecure nature of ec_file:mkdtemp obvious fixes erlware/erlware_commons#16 --- src/ec_file.erl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ec_file.erl b/src/ec_file.erl index f50695f..f26149e 100644 --- a/src/ec_file.erl +++ b/src/ec_file.erl @@ -9,7 +9,7 @@ -export([ copy/2, copy/3, - mkdtemp/0, + insecure_mkdtemp/0, mkdir_path/1, find/2, is_symlink/1, @@ -107,8 +107,8 @@ is_symlink(Path) -> %% @doc make a unique temorory directory. Similar function to BSD stdlib %% function of the same name. --spec mkdtemp() -> TmpDirPath::path(). -mkdtemp() -> +-spec insecure_mkdtemp() -> TmpDirPath::path(). +insecure_mkdtemp() -> random:seed(now()), UniqueNumber = erlang:integer_to_list(erlang:trunc(random:uniform() * 1000000000000)), TmpDirPath = @@ -304,7 +304,7 @@ hex0(I) -> $0 + I. -include_lib("eunit/include/eunit.hrl"). setup_test() -> - Dir = mkdtemp(), + Dir = insecure_mkdtemp(), mkdir_path(Dir), ?assertMatch(false, is_symlink(Dir)), ?assertMatch(true, filelib:is_dir(Dir)). @@ -313,7 +313,7 @@ md5sum_test() -> ?assertMatch("cfcd208495d565ef66e7dff9f98764da", md5sum("0")). file_test() -> - Dir = mkdtemp(), + Dir = insecure_mkdtemp(), TermFile = filename:join(Dir, "ec_file/dir/file.term"), TermFileCopy = filename:join(Dir, "ec_file/dircopy/file.term"), filelib:ensure_dir(TermFile), @@ -327,12 +327,12 @@ file_test() -> ?assertMatch("term", consult(TermFileCopy)). teardown_test() -> - Dir = mkdtemp(), + Dir = insecure_mkdtemp(), remove(Dir, [recursive]), ?assertMatch(false, filelib:is_dir(Dir)). setup_base_and_target() -> - BaseDir = mkdtemp(), + BaseDir = insecure_mkdtemp(), DummyContents = <<"This should be deleted">>, SourceDir = filename:join([BaseDir, "source"]), ok = file:make_dir(SourceDir), From 3e5eeb8cf7f70c0da80cf05e84bbf8f0965a5681 Mon Sep 17 00:00:00 2001 From: Eric Merritt Date: Tue, 5 Jun 2012 17:59:19 -0500 Subject: [PATCH 6/6] add beam files to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6846738..e85b87e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.beam .* _build erl_crash.dump