Author: kkolinko
Date: Thu Jan 14 13:59:58 2016
New Revision: 1724611

URL: http://svn.apache.org/viewvc?rev=1724611&view=rev
Log:
Rebase branch onto current tc6.0.x/trunk
This means a ctach-up merge of all revisions up to r1724610.

Modified:
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/   (props changed)
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt
    
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/core/ApplicationHttpRequest.java
    
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/buf/MessageBytes.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml

Propchange: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 14 13:59:58 2016
@@ -1,4 +1,4 @@
-/tomcat/tc6.0.x/trunk:1723244-1723827
-/tomcat/tc7.0.x/trunk:1190476,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,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722801,1723151
-/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,1713872,1713998,1714004,1714538,1715207,1716216-1716217,1716414,1717208-1717209,1720235,1720396,1720442,1720463,1721813,1721882,1722800,1723130
-/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,1190474,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,14566
 
66-1456678,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-16
 
81838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1723127
+/tomcat/tc6.0.x/trunk:1723244-1724610
+/tomcat/tc7.0.x/trunk:1190476,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,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722801,1723151,1724435,1724553
+/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,1713872,1713998,1714004,1714538,1715207,1716216-1716217,1716414,1717208-1717209,1720235,1720396,1720442,1720463,1721813,1721882,1722800,1723130,1724434
+/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,1190474,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,14566
 
66-1456678,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,1628978,1631155,1631520,1632584,1634117,1634130,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,16
 
66985,1668630,1669800,1676552,1681837-1681838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1723127,1724427,1724433

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt?rev=1724611&r1=1724610&r2=1724611&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt 
(original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt Thu Jan 
14 13:59:58 2016
@@ -5,7 +5,7 @@ Currently this serves as a proof a conce
 I expect to cherry-pick some or all of the features back to tc6.0.x/trunk.
 
 Created: 2016-01-06 from r1723242.
-Last catch-up merge: 2016-01-09, merged up to r1723827.
+Last catch-up merge: 2016-01-14, merged up to r1724610.
 
 
 Current status / Completed:

Modified: 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/core/ApplicationHttpRequest.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/core/ApplicationHttpRequest.java?rev=1724611&r1=1724610&r2=1724611&view=diff
==============================================================================
--- 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/core/ApplicationHttpRequest.java
 (original)
+++ 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/core/ApplicationHttpRequest.java
 Thu Jan 14 13:59:58 2016
@@ -5,17 +5,15 @@
  * 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.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
 package org.apache.catalina.core;
 
 
@@ -37,8 +35,9 @@ import org.apache.catalina.Globals;
 import org.apache.catalina.Session;
 import org.apache.catalina.Manager;
 import org.apache.catalina.util.Enumerator;
-import org.apache.catalina.util.RequestUtil;
 import org.apache.catalina.util.StringManager;
+import org.apache.tomcat.util.buf.MessageBytes;
+import org.apache.tomcat.util.http.Parameters;
 
 
 /**
@@ -70,8 +69,8 @@ class ApplicationHttpRequest extends Htt
     protected static final String specials[] =
     { Globals.INCLUDE_REQUEST_URI_ATTR, Globals.INCLUDE_CONTEXT_PATH_ATTR,
       Globals.INCLUDE_SERVLET_PATH_ATTR, Globals.INCLUDE_PATH_INFO_ATTR,
-      Globals.INCLUDE_QUERY_STRING_ATTR, Globals.FORWARD_REQUEST_URI_ATTR, 
-      Globals.FORWARD_CONTEXT_PATH_ATTR, Globals.FORWARD_SERVLET_PATH_ATTR, 
+      Globals.INCLUDE_QUERY_STRING_ATTR, Globals.FORWARD_REQUEST_URI_ATTR,
+      Globals.FORWARD_CONTEXT_PATH_ATTR, Globals.FORWARD_SERVLET_PATH_ATTR,
       Globals.FORWARD_PATH_INFO_ATTR, Globals.FORWARD_QUERY_STRING_ATTR };
 
 
@@ -213,7 +212,7 @@ class ApplicationHttpRequest extends Htt
             if ( requestDispatcherPath != null ){
                 return requestDispatcherPath.toString();
             } else {
-                return null;   
+                return null;
             }
         }
 
@@ -221,10 +220,10 @@ class ApplicationHttpRequest extends Htt
         if (pos == -1) {
             return getRequest().getAttribute(name);
         } else {
-            if ((specialAttributes[pos] == null) 
+            if ((specialAttributes[pos] == null)
                 && (specialAttributes[5] == null) && (pos >= 5)) {
                 // If it's a forward special attribute, and null, it means this
-                // is an include, so we check the wrapped request since 
+                // is an include, so we check the wrapped request since
                 // the request could have been forwarded before the include
                 return getRequest().getAttribute(name);
             } else {
@@ -300,7 +299,7 @@ class ApplicationHttpRequest extends Htt
             return (context.getServletContext().getRequestDispatcher(path));
 
         // Convert a request-relative path to a context-relative one
-        String servletPath = 
+        String servletPath =
             (String) getAttribute(Globals.INCLUDE_SERVLET_PATH_ATTR);
         if (servletPath == null)
             servletPath = getServletPath();
@@ -503,7 +502,7 @@ class ApplicationHttpRequest extends Htt
     public HttpSession getSession(boolean create) {
 
         if (crossContext) {
-            
+
             // There cannot be a session if no context has been assigned yet
             if (context == null)
                 return (null);
@@ -516,7 +515,7 @@ class ApplicationHttpRequest extends Htt
             HttpSession other = super.getSession(false);
             if (create && (other == null)) {
                 // First create a session in the first context: the problem is
-                // that the top level request is the only one which can 
+                // that the top level request is the only one which can
                 // create the cookie safely
                 other = super.getSession(true);
             }
@@ -532,7 +531,7 @@ class ApplicationHttpRequest extends Htt
                     // Ignore
                 }
                 if (localSession == null && create) {
-                    localSession = 
+                    localSession =
                         context.getManager().createSession(other.getId());
                 }
                 if (localSession != null) {
@@ -677,7 +676,7 @@ class ApplicationHttpRequest extends Htt
 
         // Initialize the attributes for this request
         dispatcherType = request.getAttribute(Globals.DISPATCHER_TYPE_ATTR);
-        requestDispatcherPath = 
+        requestDispatcherPath =
             request.getAttribute(Globals.DISPATCHER_REQUEST_PATH_ATTR);
 
         // Initialize the path elements for this request
@@ -767,7 +766,7 @@ class ApplicationHttpRequest extends Htt
     /**
      * Get a special attribute.
      *
-     * @return the special attribute pos, or -1 if it is not a special 
+     * @return the special attribute pos, or -1 if it is not a special
      *         attribute
      */
     protected int getSpecial(String name) {
@@ -782,7 +781,7 @@ class ApplicationHttpRequest extends Htt
 
     /**
      * Set a special attribute.
-     * 
+     *
      * @return true if the attribute was a special attribute, false otherwise
      */
     protected boolean setSpecial(String name, Object value) {
@@ -798,7 +797,7 @@ class ApplicationHttpRequest extends Htt
 
     /**
      * Remove a special attribute.
-     * 
+     *
      * @return true if the attribute was a special attribute, false otherwise
      */
     protected boolean removeSpecial(String name) {
@@ -864,29 +863,33 @@ class ApplicationHttpRequest extends Htt
         if ((queryParamString == null) || (queryParamString.length() < 1))
             return;
 
-        HashMap queryParameters = new HashMap();
-        String encoding = getCharacterEncoding();
-        if (encoding == null)
-            encoding = "ISO-8859-1";
-        try {
-            RequestUtil.parseParameters
-                (queryParameters, queryParamString, encoding);
-        } catch (Exception e) {
-            ;
-        }
-        Iterator keys = parameters.keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            Object value = queryParameters.get(key);
-            if (value == null) {
-                queryParameters.put(key, parameters.get(key));
+        HashMap<String,String[]> queryParameters = new 
HashMap<String,String[]>();
+
+        // Parse the query string from the dispatch target
+        Parameters paramParser = new Parameters();
+        MessageBytes queryMB = MessageBytes.newInstance();
+        queryMB.setString(queryParamString);
+        paramParser.setQuery(queryMB);
+        paramParser.setQueryStringEncoding(getCharacterEncoding());
+        paramParser.handleQueryParameters();
+
+        // Copy the original parameters
+        queryParameters.putAll(parameters);
+
+        // Insert the additional parameters from the dispatch target
+        Enumeration<String> dispParamNames = paramParser.getParameterNames();
+        while (dispParamNames.hasMoreElements()) {
+            String dispParamName = dispParamNames.nextElement();
+            String[] dispParamValues = 
paramParser.getParameterValues(dispParamName);
+            String[] originalValues = queryParameters.get(dispParamName);
+            if (originalValues == null) {
+                queryParameters.put(dispParamName, dispParamValues);
                 continue;
             }
-            queryParameters.put
-                (key, mergeValues(value, parameters.get(key)));
+            queryParameters.put(dispParamName, mergeValues(dispParamValues, 
originalValues));
         }
-        parameters = queryParameters;
 
+        parameters = queryParameters;
     }
 
 
@@ -914,7 +917,7 @@ class ApplicationHttpRequest extends Htt
         }
 
         public boolean hasMoreElements() {
-            return ((pos != last) || (next != null) 
+            return ((pos != last) || (next != null)
                     || ((next = findNext()) != null));
         }
 

Modified: 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/buf/MessageBytes.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/buf/MessageBytes.java?rev=1724611&r1=1724610&r2=1724611&view=diff
==============================================================================
--- 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/buf/MessageBytes.java
 (original)
+++ 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/buf/MessageBytes.java
 Thu Jan 14 13:59:58 2016
@@ -21,6 +21,7 @@ import java.text.*;
 import java.util.*;
 import java.io.Serializable;
 import java.io.IOException;
+import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 
 /**
@@ -44,14 +45,14 @@ public final class MessageBytes implemen
         was a String */
     public static final int T_STR  = 1;
     /** getType() is T_STR if the the object used to create the MessageBytes
-        was a byte[] */ 
+        was a byte[] */
     public static final int T_BYTES = 2;
     /** getType() is T_STR if the the object used to create the MessageBytes
-        was a char[] */ 
+        was a char[] */
     public static final int T_CHARS = 3;
 
     private int hashCode=0;
-    // did we computed the hashcode ? 
+    // did we computed the hashcode ?
     private boolean hasHashCode=false;
 
     // Is the represented object case sensitive ?
@@ -60,7 +61,7 @@ public final class MessageBytes implemen
     // Internal objects to represent array + offset, and specific methods
     private ByteChunk byteC=new ByteChunk();
     private CharChunk charC=new CharChunk();
-    
+
     // String
     private String strValue;
     // true if a String value was computed. Probably not needed,
@@ -100,7 +101,7 @@ public final class MessageBytes implemen
                return byteC.isNull() && charC.isNull() && ! hasStrValue;
        // bytes==null && strValue==null;
     }
-    
+
     /**
      * Resets the message bytes to an uninitialized (NULL) state.
      */
@@ -116,7 +117,7 @@ public final class MessageBytes implemen
        hasHashCode=false;
        hasIntValue=false;
     hasLongValue=false;
-       hasDateValue=false;     
+       hasDateValue=false;
     }
 
 
@@ -134,23 +135,10 @@ public final class MessageBytes implemen
         hasHashCode=false;
         hasIntValue=false;
         hasLongValue=false;
-        hasDateValue=false; 
+        hasDateValue=false;
     }
 
-    /** Set the encoding. If the object was constructed from bytes[]. any
-     *  previous conversion is reset.
-     *  If no encoding is set, we'll use 8859-1.
-     */
-    public void setCharset(Charset charset) {
-        if( !byteC.isNull() ) {
-            // if the encoding changes we need to reset the conversion results
-            charC.recycle();
-            hasStrValue=false;
-        }
-        byteC.setCharset(charset);
-    }
-
-    /** 
+    /**
      * Sets the content to be a char[]
      *
      * @param c the bytes
@@ -164,7 +152,7 @@ public final class MessageBytes implemen
         hasHashCode=false;
         hasIntValue=false;
         hasLongValue=false;
-        hasDateValue=false; 
+        hasDateValue=false;
     }
 
     /** Remove the cached string value. Use it after a conversion on the
@@ -180,7 +168,7 @@ public final class MessageBytes implemen
        }
     }
 
-    /** 
+    /**
      * Set the content to be a string
      */
     public void setString( String s ) {
@@ -188,7 +176,7 @@ public final class MessageBytes implemen
         hasHashCode=false;
         hasIntValue=false;
         hasLongValue=false;
-        hasDateValue=false; 
+        hasDateValue=false;
         if (s == null) {
             hasStrValue=false;
             type=T_NULL;
@@ -204,7 +192,7 @@ public final class MessageBytes implemen
      */
     public String toString() {
         if( hasStrValue ) return strValue;
-        
+
         switch (type) {
         case T_CHARS:
             strValue=charC.toString();
@@ -225,7 +213,7 @@ public final class MessageBytes implemen
     public int getType() {
        return type;
     }
-    
+
     /**
      * Returns the byte chunk, representing the byte[] and offset/length.
      * Valid only if T_BYTES or after a conversion was made.
@@ -250,17 +238,32 @@ public final class MessageBytes implemen
        return strValue;
     }
 
-    /** Unimplemented yet. Do a char->byte conversion.
+    /**
+     * Get the Charset used for string&lt;-&gt;byte conversions.
+     */
+    public Charset getCharset() {
+        return byteC.getCharset();
+    }
+
+    /**
+     * Set the Charset used for string&lt;-&gt;byte conversions.
+     */
+    public void setCharset(Charset charset) {
+        byteC.setCharset(charset);
+    }
+
+    /** Do a char-&gt;byte conversion.
      */
     public void toBytes() {
-        if( ! byteC.isNull() ) {
+        if (!byteC.isNull()) {
             type=T_BYTES;
             return;
         }
         toString();
         type=T_BYTES;
-        byte bb[] = strValue.getBytes();
-        byteC.setBytes(bb, 0, bb.length);
+        Charset charset = byteC.getCharset();
+        ByteBuffer result = charset.encode(strValue);
+        byteC.setBytes(result.array(), result.arrayOffset(), result.limit());
     }
 
     /** Convert to char[] and fill the CharChunk.
@@ -277,7 +280,7 @@ public final class MessageBytes implemen
        char cc[]=strValue.toCharArray();
        charC.setChars(cc, 0, cc.length);
     }
-    
+
 
     /**
      * Returns the length of the original buffer.
@@ -354,10 +357,10 @@ public final class MessageBytes implemen
        // mb is either CHARS or BYTES.
        // this is either CHARS or BYTES
        // Deal with the 4 cases ( in fact 3, one is simetric)
-       
+
        if( mb.type == T_CHARS && type==T_CHARS ) {
            return charC.equals( mb.charC );
-       } 
+       }
        if( mb.type==T_BYTES && type== T_BYTES ) {
            return byteC.equals( mb.byteC );
        }
@@ -371,7 +374,7 @@ public final class MessageBytes implemen
        return true;
     }
 
-    
+
     /**
      * Returns true if the message bytes starts with the specified string.
      * @param s the string
@@ -399,7 +402,7 @@ public final class MessageBytes implemen
        case T_STR:
            if( strValue==null ) return false;
            if( strValue.length() < pos + s.length() ) return false;
-           
+
            for( int i=0; i<s.length(); i++ ) {
                if( Ascii.toLower( s.charAt( i ) ) !=
                    Ascii.toLower( strValue.charAt( pos + i ))) {
@@ -416,15 +419,15 @@ public final class MessageBytes implemen
        }
     }
 
-    
+
 
     // -------------------- Hash code  --------------------
     public  int hashCode() {
        if( hasHashCode ) return hashCode;
        int code = 0;
 
-       if( caseSensitive ) 
-           code=hash(); 
+       if( caseSensitive )
+           code=hash();
        else
            code=hashIgnoreCase();
        hashCode=code;
@@ -432,7 +435,7 @@ public final class MessageBytes implemen
        return code;
     }
 
-    // normal hash. 
+    // normal hash.
     private int hash() {
        int code=0;
        switch (type) {
@@ -479,20 +482,20 @@ public final class MessageBytes implemen
        toString();
        return strValue.indexOf( s, starting );
     }
-    
+
     // Inefficient initial implementation. Will be replaced on the next
     // round of tune-up
     public int indexOf(String s) {
        return indexOf( s, 0 );
     }
-    
+
     public int indexOfIgnoreCase(String s, int starting) {
        toString();
        String upper=strValue.toUpperCase();
        String sU=s.toUpperCase();
        return upper.indexOf( sU, starting );
     }
-    
+
     /**
      * Returns true if the message bytes starts with the specified string.
      * @param c the character
@@ -547,7 +550,7 @@ public final class MessageBytes implemen
     private boolean hasLongValue=false;
     private Date dateValue;
     private boolean hasDateValue=false;
-    
+
     /**
      *  @deprecated The buffer are general purpose, caching for headers should
      *  be done in headers. The second parameter allows us to pass a date 
format
@@ -566,7 +569,7 @@ public final class MessageBytes implemen
            strValue=DateTool.format1123(dateValue,df);
        hasStrValue=true;
        hasDateValue=true;
-       type=T_STR;   
+       type=T_STR;
     }
 
     /**
@@ -615,7 +618,7 @@ public final class MessageBytes implemen
         hasHashCode=false;
         hasIntValue=true;
         hasLongValue=false;
-        hasDateValue=false; 
+        hasDateValue=false;
         type=T_BYTES;
     }
 
@@ -658,7 +661,7 @@ public final class MessageBytes implemen
         hasHashCode=false;
         hasIntValue=false;
         hasLongValue=true;
-        hasDateValue=false; 
+        hasDateValue=false;
         type=T_BYTES;
     }
 
@@ -672,7 +675,7 @@ public final class MessageBytes implemen
            if( dateValue==null) return -1;
            return dateValue.getTime();
        }
-       
+
        long l=DateTool.parseDate( this );
        if( dateValue==null)
            dateValue=new Date(l);
@@ -681,16 +684,16 @@ public final class MessageBytes implemen
        hasDateValue=true;
        return l;
     }
-    
+
 
     // Used for headers conversion
     /** Convert the buffer to an int, cache the value
-     */ 
-    public int getInt() 
+     */
+    public int getInt()
     {
        if( hasIntValue )
            return intValue;
-       
+
        switch (type) {
        case T_BYTES:
            intValue=byteC.getInt();
@@ -704,11 +707,11 @@ public final class MessageBytes implemen
 
     // Used for headers conversion
     /** Convert the buffer to an long, cache the value
-     */ 
+     */
     public long getLong() {
         if( hasLongValue )
             return longValue;
-        
+
         switch (type) {
         case T_BYTES:
             longValue=byteC.getLong();
@@ -723,13 +726,13 @@ public final class MessageBytes implemen
      }
 
     // -------------------- Future may be different --------------------
-    
+
     private static MessageBytesFactory factory=new MessageBytesFactory();
 
     public static void setFactory( MessageBytesFactory mbf ) {
        factory=mbf;
     }
-    
+
     public static class MessageBytesFactory {
        protected MessageBytesFactory() {
        }

Modified: 
tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml?rev=1724611&r1=1724610&r2=1724611&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml 
(original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml 
Thu Jan 14 13:59:58 2016
@@ -107,6 +107,11 @@
         Remove redundant copy of catalina.properties from o.a.c.startup.
         Generate this copy during the ant "compile" task. (kkolinko)
       </fix>
+      <fix>
+        <bug>58836</bug>: Correctly merge query string parameters when
+        processing a forwarded request where the target includes a query string
+        that contains a parameter with no value. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to