Author: markt Date: Thu Nov 12 10:29:27 2015 New Revision: 1714006 URL: http://svn.apache.org/viewvc?rev=1714006&view=rev Log: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=57741 Enable the debug servlet to use the standard error page mechanism
Modified: tomcat/tc6.0.x/trunk/ (props changed) tomcat/tc6.0.x/trunk/conf/web.xml tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc6.0.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Nov 12 10:29:27 2015 @@ -1,3 +1,3 @@ -/tomcat/tc7.0.x/trunk:1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989,1668541 ,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656 -/tomcat/tc8.0.x/trunk:1637685,1637709,1640674,1641726,1641729-1641730,1643513,1643539,1643571,1643581-1643582,1644018,1648816,1656300,1658801-1658803,1658811,1659522,1663997,1664175,1665086,1666967,1666988,1668634,1669801,1676556,1681182,1681840,1681864,1685827,1693108,1694291,1694427,1694873,1696379,1701944,1710347,1712618,1712655 -/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770 809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265 ,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,948057,95 0164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1094069, 1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,1453112,1456666-14566 78,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1632584,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,1666966,1666985,1668630,1669800,1676552,1681837-1681838,16 81854,1685826,1687242,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654 +/tomcat/tc7.0.x/trunk:1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989,1668541 ,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1714000,1714005 +/tomcat/tc8.0.x/trunk:1637685,1637709,1640674,1641726,1641729-1641730,1643513,1643539,1643571,1643581-1643582,1644018,1648816,1656300,1658801-1658803,1658811,1659522,1663997,1664175,1665086,1666967,1666988,1668634,1669801,1676556,1681182,1681840,1681864,1685827,1689921,1693108,1694291,1694427,1694873,1696379,1701944,1710347,1712618,1712655,1713998,1714004 +/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770 809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265 ,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,948057,95 0164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1094069, 1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,1453112,1456666-14566 78,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1632584,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,1666966,1666985,1668630,1669800,1676552,1681837-1681838,16 81854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713997,1714002 Modified: tomcat/tc6.0.x/trunk/conf/web.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/conf/web.xml?rev=1714006&r1=1714005&r2=1714006&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/conf/web.xml (original) +++ tomcat/tc6.0.x/trunk/conf/web.xml Thu Nov 12 10:29:27 2015 @@ -41,7 +41,8 @@ <!-- parameters (default values are in square brackets): --> <!-- --> <!-- debug Debugging detail level for messages logged --> - <!-- by this servlet. [0] --> + <!-- by this servlet. Useful values are 0, 1, and --> + <!-- 11 where higher values mean more detail. [0] --> <!-- --> <!-- fileEncoding Encoding to be used to read static resources --> <!-- [platform default] --> @@ -339,7 +340,21 @@ <!-- Recommended value: WEB-INF/cgi --> <!-- --> <!-- debug Debugging detail level for messages logged --> - <!-- by this servlet. [0] --> + <!-- by this servlet. Useful values range from 0 --> + <!-- to 5 where 0 means no logging and 5 means --> + <!-- maximum logging. Values of 10 or more mean --> + <!-- maximum logging plus debug info added to the --> + <!-- HTTP response. If an error occurs and debug --> + <!-- is 10 or more the standard error page --> + <!-- mechanism will be disabled and a response --> + <!-- body with debug information will be produced. --> + <!-- Note that any value of 10 or more has the --> + <!-- same effect as a value of 10. If set to 10 or --> + <!-- more the standard error page mechanism will --> + <!-- be disabled and a debug page shown instead. --> + <!-- The debug page is not considered secure and --> + <!-- should not be enabled for production systems. --> + <!-- [0] --> <!-- --> <!-- executable Name of the executable used to run the --> <!-- script. [perl] --> Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java?rev=1714006&r1=1714005&r2=1714006&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/servlets/CGIServlet.java Thu Nov 12 10:29:27 2015 @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -246,7 +246,15 @@ public final class CGIServlet extends Ht /* some vars below copied from Craig R. McClanahan's InvokerServlet */ - /** the debugging detail level for this servlet. */ + /** + * The debugging detail level for this servlet. Useful values range from 0 + * to 5 where 0 means no logging and 5 means maximum logging. Values of 10 + * or more mean maximum logging and debug info added to the HTTP response. + * If an error occurs and debug is 10 or more the standard error page + * mechanism will be disabled and a response body with debug information + * will be produced. Note that any value of 10 or more has the same effect + * as a value of 10. + */ private int debug = 0; /** @@ -305,12 +313,12 @@ public final class CGIServlet extends Ht if (servletName.startsWith("org.apache.catalina.INVOKER.")) throw new UnavailableException ("Cannot invoke CGIServlet through the invoker"); - + // Set our properties from the initialization parameters if (getServletConfig().getInitParameter("debug") != null) debug = Integer.parseInt(getServletConfig().getInitParameter("debug")); cgiPathPrefix = getServletConfig().getInitParameter("cgiPathPrefix"); - boolean passShellEnvironment = + boolean passShellEnvironment = Boolean.valueOf(getServletConfig().getInitParameter("passShellEnvironment")).booleanValue(); if (passShellEnvironment) { @@ -610,9 +618,11 @@ public final class CGIServlet extends Ht } if (!cgiEnv.isValid()) { - res.setStatus(404); + if (setStatus(res, 404)) { + return; + } } - + if (debug >= 10) { ServletOutputStream out = res.getOutputStream(); @@ -653,10 +663,26 @@ public final class CGIServlet extends Ht } //doGet + /* + * Behaviour depends on the status code and the value of debug. + * + * Status < 400 - Always calls setStatus. Returns false. CGI servlet will + * provide the response body. + * Status >= 400 - Depends on debug + * debug < 10 - Calls sendError(status), returns true. Standard error + * page mechanism will provide the response body. + * debug >= 10 - Calls setStatus(status), return false. CGI servlet will + * provide the response body. + */ + private boolean setStatus(HttpServletResponse response, int status) throws IOException { - /** For future testing use only; does nothing right now */ - public static void main(String[] args) { - System.out.println("$Header$"); + if (status >= HttpServletResponse.SC_BAD_REQUEST && debug < 10) { + response.sendError(status); + return true; + } else { + response.setStatus(status); + return false; + } } @@ -753,7 +779,7 @@ public final class CGIServlet extends Ht * * @param req HttpServletRequest for information provided by * the Servlet API - * @throws UnsupportedEncodingException + * @throws UnsupportedEncodingException */ protected void setupFromRequest(HttpServletRequest req) throws UnsupportedEncodingException { @@ -983,8 +1009,8 @@ public final class CGIServlet extends Ht // The app has not been deployed in exploded form webAppRootDir = tmpDir.toString(); expandCGIScript(); - } - + } + sCGINames = findCGI(sPathInfoOrig, webAppRootDir, contextPath, @@ -1129,7 +1155,7 @@ public final class CGIServlet extends Ht } /** - * Extracts requested resource from web app archive to context work + * Extracts requested resource from web app archive to context work * directory to enable CGI script to be executed. */ protected void expandCGIScript() { @@ -1171,7 +1197,7 @@ public final class CGIServlet extends Ht if (f.exists()) { // Don't need to expand if it already exists return; - } + } // create directories String dirPath = new String (destPath.toString().substring( @@ -1201,7 +1227,7 @@ public final class CGIServlet extends Ht } } } catch (IOException ioe) { - // delete in case file is corrupted + // delete in case file is corrupted if (f.exists()) { f.delete(); } @@ -1647,7 +1673,7 @@ public final class CGIServlet extends Ht proc = rt.exec( cmdAndArgs.toArray(new String[cmdAndArgs.size()]), hashToStringArray(env), wd); - + String sContentLength = (String) env.get("CONTENT_LENGTH"); if(!"".equals(sContentLength)) { @@ -1679,7 +1705,13 @@ public final class CGIServlet extends Ht new HTTPHeaderInputStream(proc.getInputStream()); BufferedReader cgiHeaderReader = new BufferedReader(new InputStreamReader(cgiHeaderStream)); - + + // Need to be careful here. If sendError() is called the + // response body should be provided by the standard error page + // process. But, if the output of the CGI process isn't read + // then that process can hang. + boolean skipBody = false; + while (isRunning) { try { //set headers @@ -1690,14 +1722,14 @@ public final class CGIServlet extends Ht log("runCGI: addHeader(\"" + line + "\")"); } if (line.startsWith("HTTP")) { - response.setStatus(getSCFromHttpStatusLine(line)); + skipBody = setStatus(response, getSCFromHttpStatusLine(line)); } else if (line.indexOf(":") >= 0) { String header = line.substring(0, line.indexOf(":")).trim(); String value = - line.substring(line.indexOf(":") + 1).trim(); + line.substring(line.indexOf(":") + 1).trim(); if (header.equalsIgnoreCase("status")) { - response.setStatus(getSCFromCGIStatusHeader(value)); + skipBody = setStatus(response, getSCFromCGIStatusHeader(value)); } else { response.addHeader(header , value); } @@ -1705,15 +1737,15 @@ public final class CGIServlet extends Ht log("runCGI: bad header line \"" + line + "\""); } } - + //write output byte[] bBuf = new byte[2048]; - + OutputStream out = response.getOutputStream(); cgiOutput = proc.getInputStream(); - + try { - while ((bufRead = cgiOutput.read(bBuf)) != -1) { + while (!skipBody && (bufRead = cgiOutput.read(bBuf)) != -1) { if (debug >= 4) { log("runCGI: output " + bufRead + " bytes of data"); @@ -1728,11 +1760,11 @@ public final class CGIServlet extends Ht while ((bufRead = cgiOutput.read(bBuf)) != -1) {} } } - + proc.exitValue(); // Throws exception if alive - + isRunning = false; - + } catch (IllegalThreadStateException e) { try { Thread.sleep(500); @@ -1774,22 +1806,22 @@ public final class CGIServlet extends Ht /** * Parses the Status-Line and extracts the status code. - * + * * @param line The HTTP Status-Line (RFC2616, section 6.1) * @return The extracted status code or the code representing an - * internal error if a valid status code cannot be extracted. + * internal error if a valid status code cannot be extracted. */ private int getSCFromHttpStatusLine(String line) { int statusStart = line.indexOf(' ') + 1; - + if (statusStart < 1 || line.length() < statusStart + 3) { // Not a valid HTTP Status-Line log ("runCGI: invalid HTTP Status-Line:" + line); return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; } - + String status = line.substring(statusStart, statusStart + 3); - + int statusCode; try { statusCode = Integer.parseInt(status); @@ -1798,17 +1830,17 @@ public final class CGIServlet extends Ht log ("runCGI: invalid status code:" + status); return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; } - + return statusCode; } /** * Parses the CGI Status Header value and extracts the status code. - * + * * @param value The CGI Status value of the form <code> * digit digit digit SP reason-phrase</code> * @return The extracted status code or the code representing an - * internal error if a valid status code cannot be extracted. + * internal error if a valid status code cannot be extracted. */ private int getSCFromCGIStatusHeader(String value) { if (value.length() < 3) { @@ -1816,9 +1848,9 @@ public final class CGIServlet extends Ht log ("runCGI: invalid status value:" + value); return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; } - + String status = value.substring(0, 3); - + int statusCode; try { statusCode = Integer.parseInt(status); @@ -1827,10 +1859,10 @@ public final class CGIServlet extends Ht log ("runCGI: invalid status code:" + status); return HttpServletResponse.SC_INTERNAL_SERVER_ERROR; } - + return statusCode; } - + private void sendToLog(BufferedReader rdr) { String line = null; int lineCount = 0 ; @@ -1865,10 +1897,10 @@ public final class CGIServlet extends Ht private static final int STATE_FIRST_LF = 2; private static final int STATE_SECOND_CR = 3; private static final int STATE_HEADER_END = 4; - + private InputStream input; private int state; - + HTTPHeaderInputStream(InputStream theInput) { input = theInput; state = STATE_CHARACTER; @@ -1899,7 +1931,7 @@ public final class CGIServlet extends Ht // |(CR) ^(LF) // | | // (CR2)-->--- - + if (i == 10) { // LF switch(state) { @@ -1932,8 +1964,8 @@ public final class CGIServlet extends Ht } else { state = STATE_CHARACTER; } - - return i; + + return i; } } // class HTTPHeaderInputStream Modified: tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml?rev=1714006&r1=1714005&r2=1714006&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/cgi-howto.xml Thu Nov 12 10:29:27 2015 @@ -98,7 +98,13 @@ By default there is no value, which resu directory being used as the search path. The recommended value is <code>WEB-INF/cgi</code></li> <li><strong>debug</strong> - Debugging detail level for messages logged -by this servlet. Default is <code>0</code>.</li> +by this servlet. Useful values range from 0 to 5 where 0 means no logging and 5 +means maximum logging. Values of 10 or more mean maximum logging plus debug info +added to the HTTP response. If an error occurs and debug is 10 or more the +standard error page mechanism will be disabled and a response body with debug +information will be produced. The debug page is not considered secure and should +not be enabled for production systems. Note that any value of 10 or more has the +same effect as a value of 10. Default is <code>0</code>.</li> <li><strong>executable</strong> - The of the executable to be used to run the script. You may explicitly set this parameter to be an empty string if your script is itself executable (e.g. an exe file). Default is Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1714006&r1=1714005&r2=1714006&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Thu Nov 12 10:29:27 2015 @@ -51,6 +51,13 @@ including the fix for <bug>57021</bug> that improves logging when the Tomcat-Native DLL fails to load. (markt) </fix> + <add> + <bug>57741</bug>: Enable the CGI servlet to use the standard error page + mechanism. Note that if the CGI servlet's debug init parameter is + set to 10 or higher then the standard error page mechanism will be + bypassed and a debug response generated by the CGI servlet will be + returned instead. (markt) + </add> <fix> <bug>57896</bug>: Support defensive copying of "cookie" header so that unescaping double quotes in a cookie value does not corrupt original --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org