(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'test git-http-backend-noserver' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HTTPD_DOCUMENT_ROOT_PATH) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))} spids: [14] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test_have_prereq)} {(GREP_STRIPS_CR)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GREP_OPTIONS) op: assign_op.Equal rhs: {(-U)} spids: [29] ) ] ) (C {(export)} {(GREP_OPTIONS)}) ] spids: [20 26] ) ] ) (command.ShFunction name: run_backend body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_Number '$2'))}) (command.Simple words: [{(git)} {(http-backend)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:84) fd: -1 arg_word: {(act.out)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:87) fd: 2 arg_word: {(act.err)} ) ] more_env: [ (env_pair name: QUERY_STRING val: { (DQ (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:59) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*[?]')}) ) ) } spids: [56] ) (env_pair name: PATH_TRANSLATED val: { (DQ ($ Id.VSub_DollarName '$HTTPD_DOCUMENT_ROOT_PATH') (/) (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:72) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{('[?]*')}) ) ) } spids: [67] ) ] ) ] negated: F ) ] ) ) (command.ShFunction name: GET body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:REQUEST_METHOD) op: assign_op.Equal rhs: {(DQ (GET))} spids: [100] ) ] ) (C {(export)} {(REQUEST_METHOD)}) (C {(run_backend)} {(DQ (/repo.git/) ($ Id.VSub_Number '$1'))}) (C {(sane_unset)} {(REQUEST_METHOD)}) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (command.Simple words: [{(grep)} {(DQ (Status))} {(act.out)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:143) fd: -1 arg_word: {(act)} ) ] ) ] negated: T ) ] action: [ (command.Simple words: [ {(printf)} {(DQ ('Status: 200 OK') (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:160) fd: -1 arg_word: {(act)} ) ] ) ] spids: [131 147] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} { (DQ ('Status: ') ($ Id.VSub_Number '$2') (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:178) fd: -1 arg_word: {(exp)} ) ] ) (C {(test_cmp)} {(exp)} {(act)}) ] ) ] ) ) (command.ShFunction name: POST body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:REQUEST_METHOD) op: assign_op.Equal rhs: {(DQ (POST))} spids: [200] ) ] ) (C {(export)} {(REQUEST_METHOD)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONTENT_TYPE) op: assign_op.Equal rhs: {(DQ (application/x-) ($ Id.VSub_Number '$1') (-request))} spids: [214] ) ] ) (C {(export)} {(CONTENT_TYPE)}) (C {(run_backend)} {(DQ (/repo.git/) ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} ) (C {(sane_unset)} {(REQUEST_METHOD)}) (C {(sane_unset)} {(CONTENT_TYPE)}) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (command.Simple words: [{(grep)} {(DQ (Status))} {(act.out)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:270) fd: -1 arg_word: {(act)} ) ] ) ] negated: T ) ] action: [ (command.Simple words: [ {(printf)} {(DQ ('Status: 200 OK') (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:287) fd: -1 arg_word: {(act)} ) ] ) ] spids: [258 274] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} { (DQ ('Status: ') ($ Id.VSub_Number '$3') (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:305) fd: -1 arg_word: {(exp)} ) ] ) (C {(test_cmp)} {(exp)} {(act)}) ] ) ] ) ) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/t556x_common)}) (command.ShFunction name: expect_aliased body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:REQUEST_METHOD) op: assign_op.Equal rhs: {(DQ (GET))} spids: [335] ) ] ) (C {(export)} {(REQUEST_METHOD)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {($ Id.VSub_Number '$1')} {(Id.Lit_Equals '=')} {(0)}) terminator: (Token id:Id.Op_Semi val:';' span_id:358) ) ] action: [(C {(run_backend)} {(DQ ($ Id.VSub_Number '$2'))})] spids: [349 360] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(run_backend)} {(DQ ($ Id.VSub_Number '$2'))}) (command.Simple words: [{(echo)} {(DQ ("fatal: '") ($ Id.VSub_Number '$2') ("': aliased"))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:390) fd: -1 arg_word: {(exp.err)} ) ] ) (C {(test_cmp)} {(exp.err)} {(act.err)}) ] ) ] ) ] ) (C {(unset)} {(REQUEST_METHOD)}) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'http-backend blocks bad PATH_INFO' span_id:416))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:420) (Token id:Id.Lit_Chars val:'\tconfig http.getanyfile true &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\n' span_id:422) (Token id:Id.Lit_Chars val:'\texpect_aliased 0 /repo.git/HEAD &&\n' span_id:423) (Token id:Id.Lit_Chars val:'\n' span_id:424) (Token id: Id.Lit_Chars val: '\texpect_aliased 1 /repo.git/../HEAD &&\n' span_id: 425 ) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 /../etc/passwd &&\n' span_id:426) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 ../etc/passwd &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 /etc//passwd &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 /etc/./passwd &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 //domain/data.txt\n' span_id:430) ) } ) (C {(test_done)}) ] )