You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/11/12 11:29:27 UTC

svn commit: r1714006 - in /tomcat/tc6.0.x/trunk: ./ conf/web.xml java/org/apache/catalina/servlets/CGIServlet.java webapps/docs/cgi-howto.xml webapps/docs/changelog.xml

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&apos;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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org