Skip to content

Commit 3ffc1a2

Browse files
committed
nhm-tool: generate more secure Makefile
with variables surrounded by commas in shell parts
1 parent a6da59c commit 3ffc1a2

File tree

4 files changed

+75
-70
lines changed

4 files changed

+75
-70
lines changed

haskell/ngx-export-distribution/Changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
- *nhm-tool*: add command *plan* to print the build plan or its derivatives.
44
Command *deps* is now a synonym for command *plan deps*.
5+
- *nhm-tool*: generate more secure *Makefile* with variables surrounded by
6+
commas in shell parts.
57

68
### 0.5.6.0
79

haskell/ngx-export-distribution/nhm-tool.hs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -545,11 +545,11 @@ makefile InitData {..} = T.concat
545545
\LIB := $(NAME).so\n\
546546
\DISTR := $(PKGNAME)-$(PKGVER).tar.gz\n\
547547
\\n\
548-
\OBJS := $(SRC:.hs=.o)\n\
549-
\HIOBJS := $(SRC:.hs=.hi)\n\
550-
\DYNOBJS := $(SRC:.hs=.dyn_o)\n\
551-
\DYNHIOBJS := $(SRC:.hs=.dyn_hi)\n\
552-
\STUBS := $(SRC:.hs=_stub.h)\n\
548+
\override OBJS := $(SRC:.hs=.o)\n\
549+
\override HIOBJS := $(SRC:.hs=.hi)\n\
550+
\override DYNOBJS := $(SRC:.hs=.dyn_o)\n\
551+
\override DYNHIOBJS := $(SRC:.hs=.dyn_hi)\n\
552+
\override STUBS := $(SRC:.hs=_stub.h)\n\
553553
\\n\
554554
\GHC := ghc\n\
555555
\CABAL := cabal\n\
@@ -582,53 +582,53 @@ makefile InitData {..} = T.concat
582582
\config: $(SETUPCONFIG)\n\
583583
\\n\
584584
\$(GHCENVLNK): cabal.project $(PKGNAME).cabal\n\
585-
\\trm -f $(GHCENVLNK)\n\
585+
\\trm -f \"$(GHCENVLNK)\"\n\
586586
\\t$(CABAL) install --builddir=\"$(BUILDDIR)\" --lib --only-dependencies \
587587
\\\\n\
588588
\\t --package-env .\n\
589-
\\tsed -i 's/\\(^package-id \\)/--\\1/' $(GHCENV)\n",
589+
\\tsed -i 's/\\(^package-id \\)/--\\1/' \"$(GHCENV)\"\n",
590590
updatePath,
591-
"\t$(NHMTOOL) deps $(PKGNAME) -d \"$(BUILDDIR)\" >> $(GHCENV)\n\
592-
\\tln -sf $(GHCENV) $(GHCENVLNK)\n\
591+
"\t$(NHMTOOL) deps \"$(PKGNAME)\" -d \"$(BUILDDIR)\" >> \"$(GHCENV)\"\n\
592+
\\tln -sf \"$(GHCENV)\" \"$(GHCENVLNK)\"\n\
593593
\\n\
594594
\$(SETUPCONFIG): $(GHCENVLNK)\n",
595595
updatePath,
596596
"\trunhaskell --ghc-arg=-package=base \\\n\
597-
\\t --ghc-arg=-package=$(PKGDISTR) Setup.hs configure \\\n\
597+
\\t --ghc-arg=-package=\"$(PKGDISTR)\" Setup.hs configure \\\n\
598598
\\t --builddir=\"$(BUILDDIR)\" \\\n\
599599
\\t --package-db=clear --package-db=global \\\n\
600-
\\t $$(sed -n 's/^\\(package-db\\)\\s\\+/--\\1=/p' $(GHCENV)) \\\n\
600+
\\t $$(sed -n 's/^\\(package-db\\)\\s\\+/--\\1=/p' \"$(GHCENV)\") \\\n\
601601
\\t $$(sed -n 's/^package-id\\s\\+\\(.*\\)'` \\\n\
602602
\\t `'\\(-\\([0-9]\\+\\.\\)*[0-9]\\+\\($$\\|-.*\\)\\)/'` \\\n\
603603
\\t `'--dependency=\\1=\\1\\2/p' \\\n\
604-
\\t $(GHCENV)) \\\n\
605-
\\t --prefix=$(PREFIX)\n\
604+
\\t \"$(GHCENV)\") \\\n\
605+
\\t --prefix=\"$(PREFIX)\"\n\
606606
\\n\
607607
\$(DISTR): $(SETUPCONFIG) $(SRC)\n",
608608
updatePath,
609609
"\trunhaskell --ghc-arg=-package=base \\\n\
610-
\\t --ghc-arg=-package=$(PKGDISTR) Setup.hs build \\\n\
610+
\\t --ghc-arg=-package=\"$(PKGDISTR)\" Setup.hs build \\\n\
611611
\\t --builddir=\"$(BUILDDIR)\" \\\n\
612612
\\t --ghc-options=\"$(SRC) -o $(LIB) $(LINKRTS)\"\n\
613613
\\n\
614614
\install: $(DISTR)\n\
615-
\\tinstall -d $(PREFIX)\n\
616-
\\ttar xf $(DISTR) -C $(PREFIX) --no-same-owner\n\
615+
\\tinstall -d \"$(PREFIX)\"\n\
616+
\\ttar xf \"$(DISTR)\" -C \"$(PREFIX)\" --no-same-owner\n\
617617
\\n\
618618
\clean:\n\
619-
\\trm -rf $(DEPLIBS)\n\
619+
\\trm -rf \"$(DEPLIBS)\"\n\
620620
\\trm -f $(OBJS) $(HIOBJS) $(DYNOBJS) $(DYNHIOBJS) $(STUBS)\n\
621-
\\trm -f $(LIB)\n\
621+
\\trm -f \"$(LIB)\"\n\
622622
\\n\
623623
\clean-all: clean\n\
624-
\\trm -rf $(BUILDDIR)\n\
625-
\\trm -f $(GHCENV) $(GHCENVLNK) $(DISTR)\n"
624+
\\trm -rf \"$(BUILDDIR)\"\n\
625+
\\trm -f \"$(GHCENV)\" \"$(GHCENVLNK)\" \"$(DISTR)\"\n"
626626
]
627627
where updatePath =
628628
"\tif test \"$(NHMTOOL)\" = nhm-tool && ! command -v nhm-tool \
629629
\>/dev/null; \\\n\
630630
\\tthen \\\n\
631-
\\t PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \\\n\
631+
\\t PATH=$$(dirname $$($(CABAL) list-bin \"$(PKGDISTR)\" \\\n\
632632
\\t --builddir=\"$(BUILDDIR)\")):$$PATH; \\\n\
633633
\\tfi; \\\n"
634634

haskell/ngx-export-distribution/test/Makefile

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ SRC := $(NAME).hs
1313
LIB := $(NAME).so
1414
DISTR := $(PKGNAME)-$(PKGVER).tar.gz
1515

16-
OBJS := $(SRC:.hs=.o)
17-
HIOBJS := $(SRC:.hs=.hi)
18-
DYNOBJS := $(SRC:.hs=.dyn_o)
19-
DYNHIOBJS := $(SRC:.hs=.dyn_hi)
20-
STUBS := $(SRC:.hs=_stub.h)
16+
override OBJS := $(SRC:.hs=.o)
17+
override HIOBJS := $(SRC:.hs=.hi)
18+
override DYNOBJS := $(SRC:.hs=.dyn_o)
19+
override DYNHIOBJS := $(SRC:.hs=.dyn_hi)
20+
override STUBS := $(SRC:.hs=_stub.h)
2121

2222
GHC := ghc
2323
CABAL := cabal
@@ -52,61 +52,61 @@ env: $(GHCENVLNK)
5252
config: $(SETUPCONFIG)
5353
5454
$(GHCENVLNK): cabal.project $(PKGNAME).cabal
55-
rm -f $(GHCENVLNK)
55+
rm -f "$(GHCENVLNK)"
5656
$(CABAL) install --builddir="$(BUILDDIR)" --lib --only-dependencies \
5757
--package-env .
5858
ifeq ($(INPLACE),1)
59-
$(CABAL) build --builddir="$(BUILDDIR)" $(PKGDISTR)
59+
$(CABAL) build --builddir="$(BUILDDIR)" "$(PKGDISTR)"
6060
echo "package-db $$(pwd)/$(BUILDDIR)/packagedb/ghc-$(GHCVER)" >> \
61-
$(GHCENV)
61+
"$(GHCENV)"
6262
endif
63-
sed -i 's/\(^package-id \)/--\1/' $(GHCENV)
63+
sed -i 's/\(^package-id \)/--\1/' "$(GHCENV)"
6464
if test "$(NHMTOOL)" = nhm-tool && ! command -v nhm-tool >/dev/null; \
6565
then \
66-
PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \
66+
PATH=$$(dirname $$($(CABAL) list-bin "$(PKGDISTR)" \
6767
--builddir="$(BUILDDIR)")):$$PATH; \
6868
fi; \
69-
$(NHMTOOL) deps $(PKGNAME) -d "$(BUILDDIR)" >> $(GHCENV)
70-
ln -sf $(GHCENV) $(GHCENVLNK)
69+
$(NHMTOOL) deps "$(PKGNAME)" -d "$(BUILDDIR)" >> "$(GHCENV)"
70+
ln -sf "$(GHCENV)" "$(GHCENVLNK)"
7171
7272
$(SETUPCONFIG): $(GHCENVLNK)
7373
if test "$(NHMTOOL)" = nhm-tool && ! command -v nhm-tool >/dev/null; \
7474
then \
75-
PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \
75+
PATH=$$(dirname $$($(CABAL) list-bin "$(PKGDISTR)" \
7676
--builddir="$(BUILDDIR)")):$$PATH; \
7777
fi; \
7878
runhaskell --ghc-arg=-package=base \
79-
--ghc-arg=-package=$(PKGDISTR) Setup.hs configure \
79+
--ghc-arg=-package="$(PKGDISTR)" Setup.hs configure \
8080
--builddir="$(BUILDDIR)" \
8181
--package-db=clear --package-db=global \
82-
$$(sed -n 's/^\(package-db\)\s\+/--\1=/p' $(GHCENV)) \
82+
$$(sed -n 's/^\(package-db\)\s\+/--\1=/p' "$(GHCENV)") \
8383
$$(sed -n 's/^package-id\s\+\(.*\)'` \
8484
`'\(-\([0-9]\+\.\)*[0-9]\+\($$\|-.*\)\)/'` \
8585
`'--dependency=\1=\1\2/p' \
86-
$(GHCENV)) \
87-
--prefix=$(PREFIX)
86+
"$(GHCENV)") \
87+
--prefix="$(PREFIX)"
8888
8989
$(DISTR): $(SETUPCONFIG) $(SRC)
9090
if test "$(NHMTOOL)" = nhm-tool && ! command -v nhm-tool >/dev/null; \
9191
then \
92-
PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \
92+
PATH=$$(dirname $$($(CABAL) list-bin "$(PKGDISTR)" \
9393
--builddir="$(BUILDDIR)")):$$PATH; \
9494
fi; \
9595
runhaskell --ghc-arg=-package=base \
96-
--ghc-arg=-package=$(PKGDISTR) Setup.hs build \
96+
--ghc-arg=-package="$(PKGDISTR)" Setup.hs build \
9797
--builddir="$(BUILDDIR)" \
9898
--ghc-options="$(SRC) -o $(LIB) $(LINKRTS)"
9999
100100
install: $(DISTR)
101-
install -d $(PREFIX)
102-
tar xf $(DISTR) -C $(PREFIX) --no-same-owner
101+
install -d "$(PREFIX)"
102+
tar xf "$(DISTR)" -C "$(PREFIX)" --no-same-owner
103103
104104
clean:
105-
rm -rf $(DEPLIBS)
105+
rm -rf "$(DEPLIBS)"
106106
rm -f $(OBJS) $(HIOBJS) $(DYNOBJS) $(DYNHIOBJS) $(STUBS)
107-
rm -f $(LIB)
107+
rm -f "$(LIB)"
108108
109109
clean-all: clean
110-
rm -rf $(BUILDDIR)
111-
rm -f $(GHCENV) $(GHCENVLNK) $(DISTR)
110+
rm -rf "$(BUILDDIR)"
111+
rm -f "$(GHCENV)" "$(GHCENVLNK)" "$(DISTR)"
112112

test/t/Makefile

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ SRC := $(NAME).hs
1313
LIB := $(NAME).so
1414
DISTR := $(PKGNAME)-$(PKGVER).tar.gz
1515

16-
OBJS := $(SRC:.hs=.o)
17-
HIOBJS := $(SRC:.hs=.hi)
18-
DYNOBJS := $(SRC:.hs=.dyn_o)
19-
DYNHIOBJS := $(SRC:.hs=.dyn_hi)
20-
STUBS := $(SRC:.hs=_stub.h)
16+
override OBJS := $(SRC:.hs=.o)
17+
override HIOBJS := $(SRC:.hs=.hi)
18+
override DYNOBJS := $(SRC:.hs=.dyn_o)
19+
override DYNHIOBJS := $(SRC:.hs=.dyn_hi)
20+
override STUBS := $(SRC:.hs=_stub.h)
2121

2222
GHC := ghc
2323
CABAL := cabal
@@ -35,6 +35,7 @@ GHCPUID := $(shell \
3535
else echo "ghc-$(GHCVER)"; \
3636
fi)
3737
GHCENV := .ghc.environment.$(MACHINE)-$(KERNEL)-$(GHCVER)
38+
GHCENVLNK := .ghc.environment.lnk
3839
DEPLIBS := $(MACHINE)-$(KERNEL)-$(GHCPUID)
3940
BUILDDIR := dist-nhm
4041
SETUPCONFIG := $(BUILDDIR)/setup-config
@@ -43,63 +44,65 @@ SETUPCONFIG := $(BUILDDIR)/setup-config
4344
4445
all: $(DISTR)
4546
46-
env: $(GHCENV)
47+
env: $(GHCENVLNK)
4748
4849
config: $(SETUPCONFIG)
4950
50-
$(GHCENV): cabal.project $(PKGNAME).cabal
51+
$(GHCENVLNK): cabal.project $(PKGNAME).cabal
52+
rm -f "$(GHCENVLNK)"
5153
$(CABAL) install --builddir="$(BUILDDIR)" --lib --only-dependencies \
5254
--package-env .
5355
$(CABAL) build --builddir="$(BUILDDIR)" ngx-export
5456
$(CABAL) build --builddir="$(BUILDDIR)" $(PKGDISTR)
5557
echo "package-db $$(pwd)/$(BUILDDIR)/packagedb/ghc-$(GHCVER)" >> \
56-
$(GHCENV)
58+
"$(GHCENV)"
5759
sed -i 's/\(^package-id \)/--\1/' $(GHCENV)
5860
if test "$(NHMTOOL)" = nhm-tool && ! command -v nhm-tool >/dev/null; \
5961
then \
60-
PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \
62+
PATH=$$(dirname $$($(CABAL) list-bin "$(PKGDISTR)" \
6163
--builddir="$(BUILDDIR)")):$$PATH; \
6264
fi; \
63-
$(NHMTOOL) deps $(PKGNAME) -d "$(BUILDDIR)" >> $(GHCENV)
65+
$(NHMTOOL) deps "$(PKGNAME)" -d "$(BUILDDIR)" >> "$(GHCENV)"
66+
ln -sf "$(GHCENV)" "$(GHCENVLNK)"
6467
65-
$(SETUPCONFIG): $(GHCENV)
68+
$(SETUPCONFIG): $(GHCENVLNK)
6669
if test "$(NHMTOOL)" = nhm-tool && ! command -v nhm-tool >/dev/null; \
6770
then \
68-
PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \
71+
PATH=$$(dirname $$($(CABAL) list-bin "$(PKGDISTR)" \
6972
--builddir="$(BUILDDIR)")):$$PATH; \
7073
fi; \
7174
runhaskell --ghc-arg=-package=base \
72-
--ghc-arg=-package=$(PKGDISTR) Setup.hs configure \
75+
--ghc-arg=-package="$(PKGDISTR)" Setup.hs configure \
7376
--builddir="$(BUILDDIR)" \
7477
--package-db=clear --package-db=global \
75-
$$(sed -n 's/^\(package-db\)\s\+/--\1=/p' $(GHCENV)) \
78+
$$(sed -n 's/^\(package-db\)\s\+/--\1=/p' "$(GHCENV)") \
7679
$$(sed -n 's/^package-id\s\+\(.*\)'` \
7780
`'\(-\([0-9]\+\.\)*[0-9]\+\($$\|-.*\)\)/'` \
7881
`'--dependency=\1=\1\2/p' \
79-
$(GHCENV)) \
80-
--prefix=$(PREFIX)
82+
"$(GHCENV)") \
83+
--prefix="$(PREFIX)"
8184
8285
$(DISTR): $(SETUPCONFIG) $(SRC)
8386
if test "$(NHMTOOL)" = nhm-tool && ! command -v nhm-tool >/dev/null; \
8487
then \
85-
PATH=$$(dirname $$($(CABAL) list-bin $(PKGDISTR) \
88+
PATH=$$(dirname $$($(CABAL) list-bin "$(PKGDISTR)" \
8689
--builddir="$(BUILDDIR)")):$$PATH; \
8790
fi; \
8891
runhaskell --ghc-arg=-package=base \
89-
--ghc-arg=-package=$(PKGDISTR) Setup.hs build \
92+
--ghc-arg=-package="$(PKGDISTR)" Setup.hs build \
9093
--builddir="$(BUILDDIR)" \
9194
--ghc-options="$(SRC) -o $(LIB) $(LINKRTS)"
9295
9396
install: $(DISTR)
94-
install -d $(PREFIX)
95-
tar xf $(DISTR) -C $(PREFIX) --no-same-owner
97+
install -d "$(PREFIX)"
98+
tar xf "$(DISTR)" -C "$(PREFIX)" --no-same-owner
9699
97100
clean:
98-
rm -rf $(DEPLIBS)
101+
rm -rf "$(DEPLIBS)"
99102
rm -f $(OBJS) $(HIOBJS) $(DYNOBJS) $(DYNHIOBJS) $(STUBS)
100-
rm -f $(LIB)
103+
rm -f "$(LIB)"
101104
102105
clean-all: clean
103-
rm -rf $(BUILDDIR)
104-
rm -f $(GHCENV) $(DISTR)
106+
rm -rf "$(BUILDDIR)"
107+
rm -f "$(GHCENV)" "$(GHCENVLNK)" "$(DISTR)"
105108

0 commit comments

Comments
 (0)