mirror of
https://github.com/PaperCutSoftware/GhostTrap.git
synced 2025-12-10 13:21:41 -06:00
Fixed issue that caused non-zero exist code
* For some reason that can't be explianed passing in a const string as an arg to GS DLL caused exit code to be reported as non-zero (but files generated). Address this by strdup'ing the appended "-dSAFER" argument. * Added some example PS and PDF files to assist with testing (TODO : clean up test script and check in). * Rolled release to version 1.2
This commit is contained in:
parent
8ec8f4b28d
commit
38e4fd42fb
13
README.md
13
README.md
@ -20,7 +20,7 @@ securely holds Ghostscripts in a laser containment field :-)
|
||||
|
||||
##Download
|
||||
|
||||
*Windows:* [ghost-trap-installer.exe](http://cdn.papercut.com/anonftp/pub/open-source/ghost-trap/ghost-trap-installer-1.1.9.07.exe) (version 1.1)
|
||||
*Windows:* [ghost-trap-installer.exe](http://cdn.papercut.com/anonftp/pub/open-source/ghost-trap/ghost-trap-installer-1.2.9.07.exe) (version 1.2)
|
||||
|
||||
##Motivation
|
||||
Page Description Language (PDL) interpreters are large complex native code solutions. Adobe Reader is also a PDL viewer and as evident
|
||||
@ -92,15 +92,20 @@ The Ghostscript interpreter code may only access:
|
||||
|
||||
##Release History
|
||||
|
||||
**2013-01-14**
|
||||
* Initial public release.
|
||||
**2013-03-04**
|
||||
* Addressed an issue that would result in Ghost Trap returning the wrong exit code.
|
||||
* Rolled to version 1.2
|
||||
|
||||
**2013-03-01**
|
||||
* Compiled against Ghostscript 9.07.
|
||||
* ```-dSAFER``` is now and enforced default.
|
||||
* Updated license to AFFERO GPL.
|
||||
* Minor code cleanup to remove some FIXME's.
|
||||
|
||||
* Rolled to version 1.1
|
||||
|
||||
**2013-01-14**
|
||||
* Initial public release.
|
||||
|
||||
|
||||
##Future
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
|
||||
set GHOST_TRAP_VERSION=1.1
|
||||
set GHOST_TRAP_VERSION=1.2
|
||||
|
||||
set INNO_COMPILER=%programfiles(x86)%\Inno Setup 5\ISCC.exe
|
||||
SETLOCAL ENABLEDELAYEDEXPANSION
|
||||
|
||||
@ -539,7 +539,7 @@ static int SandboxedMain(int argc, wchar_t* argv[]) {
|
||||
// GhostTrap is a secured version, so it's only appropriate to ensure
|
||||
// -dSAFER is always on by default. Always append (after arg 0).
|
||||
if (i == 1) {
|
||||
nargv[nargc] = "-dSAFER";
|
||||
nargv[nargc] = _strdup("-dSAFER");
|
||||
++nargc;
|
||||
}
|
||||
|
||||
|
||||
74
tests/input/alphabet.ps
Normal file
74
tests/input/alphabet.ps
Normal file
@ -0,0 +1,74 @@
|
||||
%!
|
||||
% Check for command line parameters:
|
||||
% Name, FirstSize, Ratio, NumSizes, UseOutline.
|
||||
|
||||
/alphabetsave save def % prevent left over effects
|
||||
|
||||
/FontName where { pop } { /FontName (Palatino-Italic) def } ifelse
|
||||
/FirstSize where { pop } { /FirstSize 15 def } ifelse
|
||||
/CurrentSize FirstSize def
|
||||
/Ratio where { pop } { /Ratio 1.6 def } ifelse
|
||||
/NumSizes where { pop } { /NumSizes 3 def } ifelse
|
||||
/UseOutline where { pop } { /UseOutline false def } ifelse
|
||||
|
||||
/Strings FirstSize 20 gt
|
||||
{ [
|
||||
(ABCDEFGHIJ) (KLMNOPQR) (STUVWXYZ)
|
||||
(abcdefghijklm) (nopqrstuvwxyz)
|
||||
(0123456789<=>) (:;?@ !"#$%&')
|
||||
(\(\)*+,-./[\\]^_) (`{|}~)
|
||||
] }
|
||||
{ [
|
||||
(ABCDEFGHIJKLMNOPQRSTUVWXYZ)
|
||||
(abcdefghijklmnopqrstuvwxyz)
|
||||
(0123456789<=>:;?@ !"#$%&')
|
||||
(\(\)*+,-./ [\\]^_ `{|}~)
|
||||
] }
|
||||
ifelse def
|
||||
|
||||
/sshow
|
||||
{ gsave UseOutline
|
||||
{ { gsave ( ) dup 0 4 -1 roll put
|
||||
false charpath pathbbox 0 setlinewidth stroke grestore
|
||||
pop 8 add currentpoint exch pop moveto pop
|
||||
} forall
|
||||
}
|
||||
{ 2 0 3 -1 roll ashow }
|
||||
ifelse grestore
|
||||
} def
|
||||
|
||||
FontName findfont FirstSize scalefont setfont
|
||||
|
||||
clippath pathbbox /top exch def pop pop pop newpath
|
||||
10 10 moveto
|
||||
NumSizes
|
||||
{
|
||||
gsave
|
||||
CurrentSize 50 lt {
|
||||
FontName findfont 50 scalefont setfont
|
||||
(Q) false charpath pathbbox
|
||||
exch pop exch sub exch pop 1.25 mul CurrentSize 50 div mul /height exch def
|
||||
}{
|
||||
(Q) false charpath pathbbox
|
||||
exch pop exch sub exch pop 1.25 mul /height exch def
|
||||
} ifelse
|
||||
grestore
|
||||
Strings
|
||||
{ currentpoint exch pop top height 3 mul sub gt
|
||||
{ showpage 10 10 height sub moveto
|
||||
}
|
||||
if
|
||||
dup sshow
|
||||
UseOutline not
|
||||
{ 0 height rmoveto gsave 0.01 rotate sshow grestore }
|
||||
if
|
||||
0 height rmoveto
|
||||
} forall
|
||||
/CurrentSize FirstSize Ratio mul def
|
||||
FontName findfont CurrentSize scalefont setfont
|
||||
/Ratio Ratio dup mul def
|
||||
} repeat
|
||||
showpage
|
||||
|
||||
clear cleardictstack
|
||||
alphabetsave restore
|
||||
BIN
tests/input/annots.pdf
Normal file
BIN
tests/input/annots.pdf
Normal file
Binary file not shown.
1052
tests/input/chess.ps
Normal file
1052
tests/input/chess.ps
Normal file
File diff suppressed because it is too large
Load Diff
384
tests/input/escher.ps
Normal file
384
tests/input/escher.ps
Normal file
@ -0,0 +1,384 @@
|
||||
%!
|
||||
% If you're concerned that the cpu in your PostScript printer will atrophy
|
||||
% from disuse, here is another Escher-like contribution to to keep it busy
|
||||
% for a while. It uses PostScript color commands, but will still work on
|
||||
% a monochrome printer (but isn't very pretty in black & white).
|
||||
%
|
||||
% The butterflies are arranged in a hexagonal grid (wallpaper group p6),
|
||||
% and the moveto, lineto, curveto commands used to render the tesselation
|
||||
% are redefined so as to impose a nonlinear transform that shrinks the
|
||||
% infinite plane to an ellipse. This is a sleazy way to mimic Escher's
|
||||
% "circle limit" sorts of things.
|
||||
%
|
||||
% The butterfly permimeter was made by imposing all the symmetry constraints
|
||||
% on a path, and then that path was filled in using Adobe Illustrator
|
||||
%
|
||||
% The routines Xform and next_color are easy to change if you want to hack
|
||||
% with them. The code was written to sacrifice efficiency for readability.
|
||||
%
|
||||
% Bob Wallis
|
||||
%
|
||||
% UUCP {sun,pyramid,cae780,apple}!weitek!wallis
|
||||
|
||||
/eschersave save def % prevent left over side effects
|
||||
|
||||
%statusdict begin waittimeout 6000 lt % if you have a slow printer, you
|
||||
% {0 60 6000 setdefaulttimeouts} % might need to uncomment this
|
||||
%if end
|
||||
|
||||
/nlayers 1 def % 1 takes about 10 minutes on a LW+; 2 takes 4x longer
|
||||
/warp 1 def % 1 -> ellipsoidal distortion; 0 -> flat Euclidean
|
||||
/inch {72 mul} def
|
||||
|
||||
/x4 152 def /y4 205.6 def % 6 fold rotation center of bfly
|
||||
/x12 387.20 def /y12 403.84 def % 3 fold center of bfly
|
||||
|
||||
/dx x4 x12 sub def % [dx,dy] = distance between the
|
||||
/dy y4 y12 sub def % two fixed points above
|
||||
|
||||
/Dm dx dup mul dy dup mul % magnitude of basis vectors of
|
||||
add sqrt 3 sqrt mul % parallelogram lattice
|
||||
def % = |dx,dy| * sqrt(3)
|
||||
|
||||
/Da dy dx atan 30 add def
|
||||
/D1x Dm Da cos mul def % [D1x, D1y] = basis vector vector #1
|
||||
/D1y Dm Da sin mul def % = [Dm,0] exp(j30)
|
||||
|
||||
/Da dy dx atan 30 sub def
|
||||
/D2x Dm Da cos mul def % [D2x, D2y] = basis vector vector #2
|
||||
/D2y Dm Da sin mul def % = [Dm,0] exp(-j30)
|
||||
|
||||
/m { moveto} def
|
||||
/L {lineto} def
|
||||
/S {stroke} def
|
||||
/c {curveto} def
|
||||
/f {closepath fill} def
|
||||
/F {closepath fill} def
|
||||
/g { setgray} def
|
||||
|
||||
/FillStroke { % fill interior & stroke black border
|
||||
closepath gsave fill grestore 0 setgray stroke
|
||||
} def
|
||||
|
||||
%
|
||||
% Description of 1 butterfly
|
||||
%
|
||||
/body {
|
||||
314.96 280.19 m
|
||||
383.4 261.71 445.11 243.23 513.52 224.68 c
|
||||
463.68 256.59 490.26 328.83 446.99 360.76 c
|
||||
423.71 347.32 397.08 339.7 367.07 337.9 c
|
||||
388.93 358.28 414.14 372.84 442.73 381.58 c
|
||||
426.68 398.18 394.07 389.7 387.2 403.84 c
|
||||
371.52 404.96 362.56 372.48 340.16 366.88 c
|
||||
346.88 396.01 346.88 425.12 340.16 454.24 c
|
||||
326.72 427.35 320 400.48 320 373.6 c
|
||||
270.71 352.1 221.44 411.23 168.88 384.02 c
|
||||
189.04 388.03 202.48 380.4 212.57 366.95 c
|
||||
216.72 350.85 209.23 341.46 190.1 338.79 c
|
||||
177.34 343.57 167.94 354.17 161.9 370.59 c
|
||||
176.06 305.52 132.02 274.05 152 205.6 c
|
||||
201.29 257.12 250.56 234.72 299.84 279.52 c
|
||||
288.64 266.08 284.16 252.64 286.4 239.2 c
|
||||
298.27 223.97 310.15 222.18 322.02 233.82 c
|
||||
328.62 249.28 328.51 264.74 314.96 280.19 c
|
||||
FillStroke
|
||||
} def
|
||||
|
||||
/eyes {
|
||||
294.8125 238.3246 m
|
||||
296.9115 238.3246 298.6132 242.7964 298.6132 248.3125 c
|
||||
298.6132 253.8286 296.9115 258.3004 294.8125 258.3004 c
|
||||
292.7135 258.3004 291.0118 253.8286 291.0118 248.3125 c
|
||||
291.0118 242.7964 292.7135 238.3246 294.8125 238.3246 c
|
||||
closepath gsave 1 g fill grestore 0 g S
|
||||
|
||||
319.5 241.1782 m
|
||||
321.7455 241.1782 323.5659 245.4917 323.5659 250.8125 c
|
||||
323.5659 256.1333 321.7455 260.4468 319.5 260.4468 c
|
||||
317.2545 260.4468 315.4341 256.1333 315.4341 250.8125 c
|
||||
315.4341 245.4917 317.2545 241.1782 319.5 241.1782 c
|
||||
closepath gsave 1 g fill grestore 0 g S
|
||||
0 g
|
||||
296.875 242.0939 m
|
||||
297.4608 242.0939 297.9356 243.479 297.9356 245.1875 c
|
||||
297.9356 246.896 297.4608 248.2811 296.875 248.2811 c
|
||||
296.2892 248.2811 295.8143 246.896 295.8143 245.1875 c
|
||||
295.8143 243.479 296.2892 242.0939 296.875 242.0939 c
|
||||
f
|
||||
0 g
|
||||
318.5 243.7707 m
|
||||
319.281 243.7707 319.9142 245.0766 319.9142 246.6875 c
|
||||
319.9142 248.2984 319.281 249.6043 318.5 249.6043 c
|
||||
317.719 249.6043 317.0858 248.2984 317.0858 246.6875 c
|
||||
317.0858 245.0766 317.719 243.7707 318.5 243.7707 c
|
||||
f
|
||||
} def
|
||||
|
||||
/stripes {
|
||||
292 289 m
|
||||
252 294 241 295 213 279 c
|
||||
185 263 175 252 159 222 c
|
||||
S
|
||||
285 313 m
|
||||
239 326 226 325 206 315 c
|
||||
186 305 164 278 161 267 c
|
||||
S
|
||||
298 353 m
|
||||
262 342 251 339 237 355 c
|
||||
223 371 213 380 201 383 c
|
||||
S
|
||||
330 288 m
|
||||
384 293 385 292 418 280 c
|
||||
451 268 452 264 473 247 c
|
||||
S
|
||||
342 306 m
|
||||
381 311 386 317 410 311 c
|
||||
434 305 460 287 474 262 c
|
||||
S
|
||||
345 321 m
|
||||
352 357 359 367 379 377 c
|
||||
399 387 409 385 426 382 c
|
||||
S
|
||||
327.75 367.75 m
|
||||
336.5 392.25 333.682 403.348 335.25 415.5 c
|
||||
S
|
||||
320 364.75 m
|
||||
322 361.75 323.5 360.5 326.25 360 c
|
||||
329 359.5 332 360.5 334 362.75 c
|
||||
S
|
||||
316.25 356.5 m
|
||||
318.75 353.25 320 353 323.25 352.25 c
|
||||
326.5 351.5 329 352 331.5 353.25 c
|
||||
S
|
||||
312.5 349 m
|
||||
316.75 345.5 318.25 344.5 321.25 343.75 c
|
||||
324.25 343 327 344 329.75 346 c
|
||||
S
|
||||
310.75 340.75 m
|
||||
314.25 336.5 316.25 335.25 320 335.25 c
|
||||
323.75 335.25 327 336.5 329.25 338 c
|
||||
S
|
||||
308.5 332 m
|
||||
311.75 328.5 312.5 327.25 317 327 c
|
||||
321.5 326.75 325.75 328.25 327.75 329.75 c
|
||||
S
|
||||
305 322 m
|
||||
309.5 317.75 310.75 317 315 316.5 c
|
||||
319.25 316 322.25 318 324.75 320 c
|
||||
S
|
||||
302.25 311 m
|
||||
307 307.5 307.75 306.25 312.75 306 c
|
||||
317.75 305.75 320 307.25 323.75 309.5 c
|
||||
S
|
||||
301.25 298.25 m
|
||||
304.5 292.75 305.25 292 308.25 292 c
|
||||
311.25 292 313.75 293.75 315.75 295.75 c
|
||||
S
|
||||
} def
|
||||
/nostrils {
|
||||
0 g
|
||||
304.062 227.775 m
|
||||
304.599 227.775 305.034 228.883 305.034 230.25 c
|
||||
305.034 231.616 304.599 232.724 304.062 232.724 c
|
||||
303.525 232.724 303.09 231.616 303.09 230.25 c
|
||||
303.09 228.883 303.525 227.775 304.062 227.775 c
|
||||
f
|
||||
304.062 230.25 m
|
||||
F
|
||||
309.562 228.275 m
|
||||
310.099 228.275 310.534 229.383 310.534 230.75 c
|
||||
310.534 232.116 310.099 233.224 309.562 233.224 c
|
||||
309.025 233.224 308.59 232.116 308.59 230.75 c
|
||||
308.59 229.383 309.025 228.275 309.562 228.275 c
|
||||
f
|
||||
} def
|
||||
/thorax
|
||||
{
|
||||
327.5 300 m
|
||||
316.5 283 315.5 275.5 308 277.5 c
|
||||
294 311.5 299 313.5 304 334 c
|
||||
309 354.5 315.5 362 322.5 372 c
|
||||
329.5 382 327.5 376.5 331 376 c
|
||||
334.5 375.5 339.1367 379.1109 339 369 c
|
||||
338.5 332 333.4999 324.5 330.5 311.5 c
|
||||
0 g S
|
||||
} def
|
||||
/spots {
|
||||
next_color
|
||||
192 242.201 m
|
||||
202.1535 242.201 210.3848 251.0655 210.3848 262 c
|
||||
210.3848 272.9345 202.1535 281.799 192 281.799 c
|
||||
181.8465 281.799 173.6152 272.9345 173.6152 262 c
|
||||
173.6152 251.0655 181.8465 242.201 192 242.201 c
|
||||
FillStroke
|
||||
next_color
|
||||
447.5 250.2365 m
|
||||
459.6061 250.2365 469.4203 257.5181 469.4203 266.5 c
|
||||
469.4203 275.4819 459.6061 282.7635 447.5 282.7635 c
|
||||
435.3939 282.7635 425.5797 275.4819 425.5797 266.5 c
|
||||
425.5797 257.5181 435.3939 250.2365 447.5 250.2365 c
|
||||
FillStroke
|
||||
next_color
|
||||
401 369.1005 m
|
||||
409.5914 369.1005 416.5563 373.5327 416.5563 379 c
|
||||
416.5563 384.4673 409.5914 388.8995 401 388.8995 c
|
||||
392.4086 388.8995 385.4436 384.4673 385.4436 379 c
|
||||
385.4436 373.5327 392.4086 369.1005 401 369.1005 c
|
||||
FillStroke
|
||||
next_color
|
||||
249 348.2721 m
|
||||
261.4966 348.2721 271.6274 353.9707 271.6274 361 c
|
||||
271.6274 368.0293 261.4966 373.7279 249 373.7279 c
|
||||
236.5034 373.7279 226.3726 368.0293 226.3726 361 c
|
||||
226.3726 353.9707 236.5034 348.2721 249 348.2721 c
|
||||
FillStroke
|
||||
} def
|
||||
|
||||
/ncolor 6 def
|
||||
/cidx 0 def
|
||||
|
||||
/next_color {
|
||||
cidx ncolor div % hue
|
||||
.75 % saturation (change these if you like)
|
||||
.8 % lightness
|
||||
sethsbcolor
|
||||
/cidx cidx 1 add ncolor mod def
|
||||
} def
|
||||
|
||||
/cidx 0 def
|
||||
|
||||
/max_r2 % radius^2 for center of outermost ring of butterflies
|
||||
Dm nlayers mul 1.05 mul dup mul
|
||||
def
|
||||
|
||||
/max_radius max_r2 sqrt def
|
||||
/max_radius_inv 1 max_radius div def
|
||||
/Dm_inv 1 Dm div def
|
||||
|
||||
%
|
||||
% Ellipsoidal distortion, maps "nlayers" concentric rings of cells into
|
||||
% an ellipse centered on page
|
||||
|
||||
% D length of 1 basis vector separating hexagonal cells
|
||||
% z0 center of 6-fold rotation = origin of shrink xform
|
||||
% z' = (z - z0)/D new coord system
|
||||
% |z'| = sqrt(x^2 + [(8.5/11)*y]^2) aspect ratio of paper
|
||||
% z" = z' * a/M(|z'|) shrink by "a/M(|z|)" as fcn of radius
|
||||
|
||||
% At the max radius, we want the shrunk ellipse to be "W" units wide so it
|
||||
% just fits our output format - solve for scale factor "a"
|
||||
|
||||
% zmax = n+0.5 for n layers of cells
|
||||
% zmax * [a/M(zmax)] = W 1/2 width of output on paper
|
||||
% a = M(zmax)*W/zmax solve for "a"
|
||||
|
||||
%/M{dup mul 1 add sqrt}bind def % M(u) = sqrt(1+|u|^2) = one possible shrink
|
||||
/M { 1.5 add } bind def % M(u) = (1.5+|u|) = another possible one
|
||||
/W 3.8 inch def % 1/2 width of ellipse
|
||||
/zmax 0.5 nlayers add def % radius at last layer of hexagons
|
||||
/a zmax M W mul zmax div def % a = M(zmax)*W/zmax
|
||||
|
||||
/Xform { % [x0,y0] = ctr ellipse
|
||||
Matrix transform
|
||||
/y exch def
|
||||
/x exch def
|
||||
/z x dup mul y .773 mul dup mul add sqrt def % ellipse radius
|
||||
/Scale a z M div def % z=a/M(|z|)
|
||||
x Scale mul x0 add % magnify back up
|
||||
y Scale mul y0 add % [x0+x*s, y0+y*s]
|
||||
} def
|
||||
|
||||
|
||||
/Helvetica findfont 8 scalefont setfont
|
||||
4.25 inch 0.5 inch moveto
|
||||
(RHW) stringwidth pop -0.5 mul 0 rmoveto
|
||||
(RHW) show % autograph
|
||||
|
||||
warp 1 eq { % redefine commands to use Xform
|
||||
/moveto { Xform //moveto} def
|
||||
/lineto { Xform //lineto} def
|
||||
/curveto {
|
||||
Xform 6 -2 roll
|
||||
Xform 6 -2 roll
|
||||
Xform 6 -2 roll
|
||||
//curveto
|
||||
} def
|
||||
}if
|
||||
|
||||
|
||||
/bfly { % paint 1 butterfly
|
||||
next_color body
|
||||
1 setgray eyes
|
||||
stripes
|
||||
0 setgray nostrils
|
||||
0.5 setgray thorax next_color
|
||||
spots
|
||||
} def
|
||||
|
||||
/x0 x4 def % center
|
||||
/y0 y4 def
|
||||
|
||||
/T1matrix % xlate to center of image
|
||||
x0 neg y0 neg matrix translate
|
||||
def
|
||||
|
||||
/Smatrix % scale so that 1 basis vector = 1.0
|
||||
Dm_inv dup matrix scale
|
||||
def
|
||||
|
||||
/HexCell { % 6 butterflys rotated about center of
|
||||
/cidx 0 def % 6 fold symmetry
|
||||
/color 0 def
|
||||
/T2matrix dx dy matrix translate def
|
||||
0 60 300 {
|
||||
/angle exch def
|
||||
/Rmatrix angle matrix rotate def
|
||||
/Matrix % translate, rotate, scale - used by Xform
|
||||
T1matrix Rmatrix matrix concatmatrix
|
||||
T2matrix matrix concatmatrix
|
||||
Smatrix matrix concatmatrix
|
||||
def
|
||||
gsave
|
||||
warp 0 eq % then may use usual PostScript machinery
|
||||
{ % else using Xform
|
||||
x0 y0 translate angle rotate
|
||||
.5 dup scale
|
||||
dx x0 sub dy y0 sub translate
|
||||
} if
|
||||
bfly
|
||||
next_color
|
||||
grestore
|
||||
} for
|
||||
} def
|
||||
|
||||
|
||||
%320 x4 sub 240 y4 sub translate
|
||||
4.25 inch x4 sub 5.5 inch y4 sub translate
|
||||
|
||||
|
||||
0 setlinewidth
|
||||
/N 2 def
|
||||
N neg 1 N {
|
||||
/i exch def % translate to
|
||||
N neg 1 N { % i*D1 + j*D2
|
||||
/j exch def % and draw HexCell
|
||||
gsave
|
||||
/dx i D1x mul j D2x mul add def % translate HexCell by
|
||||
/dy i D1y mul j D2y mul add def % [dx,dy]
|
||||
/r2 dx dup mul dy dup mul add def % r^2 = |dx,dy|^2
|
||||
r2 max_r2 lt % inside radius?
|
||||
{ % yes
|
||||
1 r2 max_r2 div sub sqrt 2 div
|
||||
setlinewidth % make skinnier lines
|
||||
HexCell % 6 butterflies
|
||||
}
|
||||
if
|
||||
grestore
|
||||
} for
|
||||
} for
|
||||
|
||||
showpage
|
||||
|
||||
clear cleardictstack
|
||||
eschersave restore
|
||||
Loading…
x
Reference in New Issue
Block a user