vertx-web
vertx-web copied to clipboard
HttpServerRequest.formAttributes() has redundant /r
Questions
HttpServerRequest.formAttributes() has redundant /r
Version
4.3.3
Context
I create a simple upload handler. But when I select a picture file, I cannot get the right data. field fileMD5 value has redundant /r
Do you have a reproducer?
https://github.com/scx567888/error-example2
Steps to reproduce
- Run Main.java
- Open browser to http://localhost:8888/
- Select file 1.jpg (in my repo file directory)
- Multiple clicks upload button and see terminal (not browser console)
- You will see the bug
Extra
Browser : Edge 104.0.1293.54 (x64) JDK : openjdk version "17.0.4" 2022-07-19 (x64) OS : Windows 10 19044.1889 (x64)
When i change file name 1.jpg -> 111.jpg . I will get right fileMD5 , It seems to be related to the name of the file
It seems that the bug occurs only when the file is https://github.com/scx567888/error-example2/blob/master/file/1.jpg and the name is 1.jpg

Can not reproduce, using Linux.
https://user-images.githubusercontent.com/75682569/185769593-bf6e283b-85e2-4162-a027-9b70e73902e5.mp4
I'm able to reproduce the issue.
it might be a bug in Netty post request decoder
it's very dependant on the timing of the post data, here is a reproducer for vertx-core
@Test
public void testReproducer() throws Exception {
server.requestHandler(req -> {
req.setExpectMultipart(true);
req.endHandler(v -> {
System.out.println("DONE " + ByteBufUtil.hexDump(Unpooled.copiedBuffer(req.formAttributes().get("fileMD5"), StandardCharsets.UTF_8)));
testComplete();
});
});
startServer();
NetClient client = vertx.createNetClient();
String[] data1 = {
"POST /upload HTTP/1.1\r\n" +
"Host: localhost:8888\r\n" +
"Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryF7zkICxC5SbKfiqX\r\n" +
"Origin: http://localhost:8888\r\n" +
"Accept-Encoding: gzip, deflate\r\n" +
"Connection: keep-alive\r\n" +
"Accept: */*\r\n" +
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15\r\n" +
"Referer: http://localhost:8080/\r\n" +
"Content-Length: 8437\r\n" +
"Accept-Language: en-us\r\n" +
"\r\n",
"2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971580d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2266696c654e616d65220d0a0d0a312e6a70670d0a2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971580d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2266696c6544617461223b2066696c656e616d653d22312e6a7067220d0a436f6e74656e742d547970653a20696d6167652f6a7065670d0a0d0affd8ffe000104a46494600010101004800480000ffdb0043000302020302020303030304030304050805050404050a070706080c0a0c0c0b0a0b0b0d0e12100d0e110e0b0b1016101113141515150c0f171816141812141514ffdb00430103040405040509050509140d0b0d1414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414ffc0001108006e006e03011100021101031101ffc4001c0000020301010101000000000000000000050604070803000902ffc40042100002010303020403060305040b000000010203040511061221003107132241145161082332427191156281165292a1b182d1e1f00924253463727393a2c1f1ffc4001c0100020301010101000000000000000000030402050601070008ffc4003311000202010303020405040105000000000102000311041221053141132251617181233291a1f006b1c1d114154292e1f1ffda000c03010002110311003f00fa053d5001893803b9eb56ab3f3edd7e39317ee37b8b6348efe5d3a1c6e20fa9be58c73d3895e3eb33ba9d5efcfc20186e6f769320144079c9c81f4cfcfebd3e2b158997b7506f6f948b73d4d15117a5a54334c8332141c460f19ff5e07270700f444a0b7b9a09f51b06c482a1a59e666927729b89c8272587cfe43f4e71faf3d35c018025716398416204fdda843d8c8467fe27a8e7e321c989d79bdad78920b3c7e66018dee2dedf30beec7f4e3ab0a2b230d61c46d4041969586a0d352355fc3bbb555c643bd6943fae419e59db9118fd724f6eaf2bbb8e3b4b7aadda33d84e0fa021a2479aa11279d87a6203eee3fa7f31fe63fb75d3a83dbc42ff00cc66385e040d3d8669a0348bf748c7cc21463030406fd47381f53d058a96dd2c12f0a33de46abb545434e228948403927924fcc9f73d737e7933a18d8db898a578a5f81a4967f2f99980ce39c29e4fee7afb764cb9a497c2c4fbad9fcd759e1519619200c67df3d4e5ce9ad2328d2eff00b3468e5d6d77aab3cd5269561a36a957c673891148ff00e59ea9baa5be8d23e67fc19354dd767e5fe66b1aebdb5633a8631d3c7cb9048273dbfaff00cfbf59d5a428e3bcc2ddaa6b7f37e58a1a9af75134f153d3328949d91a64e2218c963f22011fbf1dbab2a2818c99537b92327b4e6b7492a81b55af72470802a6ad891b54f70a7ddc839f90ee7d81e9500ee61ccae1f97e523d9ed70d4d4c950a37d0c0c552477dcd51229f53c9ec769185f960e3db13624000f78261c43a25594f1c01efd7318801df1015d2b64bf9345493494b4719fbe9e16daec7fb80fb7b64f46445afdce3264c36ce62e6a3bec7679e0b0d96288de26c2aaedfbba653f9c81efce47ee7eae555971ea59da394d46cfc4b7b4f5169f834ed1bc8eed535d360cf52fea9267fa9ea46d2e703810acc6ce3c41d7eaa5a3894b219676215221dc9271fb7fbba92e49f94668ab7fd040bf04d1239918bbe09663eff00f0ea7ba35c6e0076816e94a0e41edee7e5d7c1b31eabbc50bfd19aea778c0c2aa1083e58ff00ef8ea6a7065c5276b8c445a3df5303276785b23e78ff0093d32bc99a2640a770f335a7d9734fd1e9fd2d59a8ea9920fe2327c3d3c8fdd63424900e39cbeecffe98eb27d55d9ee152f65812e13dadde32ea3be8b6d3a414e2335931db4b09ecbfccd8f61824fe9d169a77f2679db30233e22ad3c35172a83e4cbb5c8c4f5a1782a4e582fb64b1273db9f9000d86422ca776de7264ad437aa5b2db292cd44151aa5bc90887256339deff0033f2cfcc8eb9554589b1bc4e64b9cf8126d4dccc3494d4708f82a3a74f5339033db0abf3239e3e7dfa1841b8b1e4991ce6738ebea2f03eec9a6b6260191f00bff977ce3f7e8bb4277ef06540ed",
"de09d63ae69b45daf7451abd537ddd353291e938fc4df4eddb3dc7cfa353a737373da31a6d39b9bddd8411e1bd1ada296a2f37398bdc6a15e49ea243f853393fe80fedd1f54dbf15a7611cbdbd422b493ebefe20a79ef172610d30ff00bb4070adb4fb9ce393ee3db1d2aa858ed5855a0b30aabef1434ccb36a6bb4f7aaa4608994a446c8c2e3971f439c67e9d32e3d31b44b3d4aae9eb152f7f3f592ee1741f02f2a64f98fe527ec71d09573c48d356e703e1215f3fead472cadf9573cfe9d417398dd2bb9c08bf4e8935ba967e3ef1437f423a267dd2cff2da40f12aea746a4bb56c6de93bd81febc8ff005e9eaf07bcd695df5298ff00ac75dcf49a76cba3e9aa15a92d281e5d803abd43ee77ff000348c9fd0fcfaadd3547d47bdc7b9bfb448d0f6b97f12dca1a2a9bfd53d756c855245ee46d3b49ec0f6c10067f4c76ce78c05636a89e476dd9f688c2d70a4b5c4b1f9b0c6a06555a454ddfcc33dc0c7fa741d8ce627c9ef1429ad90ddb52c97c8e492ed95094e57315340011d9ff00390c0f6c0ce78ed8799ca57e91e04659cd6be963bc3c96492b674a9bbd48a7a6048828d57649363b85538c0ce3b0ce31db8e9336e3db5883ced1c487a9b5b4341534f6ca1111a855c05f3018a9400725f9e5800723db1fbb34e9cb0def095d4cfcb7688ed44fa86ee2aab114f9781b49dcd1bf7d8c7b12b92c7ead8fca3ab1dde92e163c1fd24c2f786e0b92df6e6d6f8f6a5ae8c896a2a4365252304267b003393dfb7b74a95d8377930889e926f3f98f68b579b837885a89e909f2b4edb773544b19ce541c019f9b15e07cb3d195052991dccb7a94e8aade065da36d919934ec95450430b02b4910fc900f4c633efc7ab27fbdd26fcbe2575fcddb7313af15d253545aa9e1e694d54106e1cef7690331fa6150ff008fa90f32f294f6b37c89fda74f146edf03698e18fd52cc4e1077200ff795ea152e677a6d66c72c7c4113552da68ec144cdea9540e78e1632dfeeeb806589965a74f52d763da56da92a765ee5910e0bc5149c7ccc6bd3f4f6ccd6699735806076aa3236e76f53724b1c927a99c663a142f69b829a9d1635670569c0210ae1777b6d5e3b0c8e7fe1d503b1276a779f9c4631becedfde2a5e3e16fef2c72c8282c2836c93c2de51a890120c63fbc98ce4fb9f73cf4e540d63dbcb497aac8770193f092e7d45f096f863b25bd3c81848a478b6203d97cb52064e718e0fe9d7cb4827f11a403b67731c9812eb2dce8289034ed36a1af93e14166de6024f68d87e1c29058fb6460f1d3082b2ddbda39fac3a386393d84569922b38aa68e952b4c1812cb2fac48c4e1703be0b8248f755fdde6cbe04b0426cfbc8f70bd45436f8e82cce66aa73b4b769198f7273ce49f73d0ecfc31ea59f6973a0e9f66aed26c1850339f942cb6f75b753e9fb7c8ea92eef88aa6ce4a9c962718e3bfcbb6067b748fabefcb778f5b4ec53adb4614f0bfcfb48ba9e9e9b4f5b60d3f6b04dd2ed22ae4e032a9206e7c71ef8ff00698fbe3a99b7277b40e912ed53b6a987b1013fcfbc2daeaed1e99b0c76e864091c30aa6f3cb61400071f4e7fa8ea150dcdba0341436aad361ed932bd82ed141a968a9aa26575a188d5cca013baadbd017ea14631fa77e98d99071e66a0d0cd439c637703e9236a8acaad49aeadf6c3b163a6755620f666da5b273edc2ff4eb8abb1327cc674b52e8f46f6377399175f5593a8236a6ded4f40b346ac4fe62a17fcb23a8a2e172613a7d612a3bbfeec1fd657f7d99dee814f7482143ff00b4bd1d3859a9a1404fb981679fd585efeffb9eb9924c69538ccdd4af55a86513ab986949de181c34bcf078fc298c607739f6ec6b02252307bcfcbcf639627cc55d73aa4e9fab8ad5452d5d65da7195a3a595c903919383c0e3ab0d26985a3d4718585a52db54b9381f1814534fa6a79eb2eb5bf197468c810ab33c7002bdd4939dd823f73f43d3585bc0541851e643d616f158e249ba5e96c5a66ddf110b9bc4d0d4d3c7185fc06565249fa85d98fd7f5ea15d02eb4853ed188cd086e623c712a6d49e28d2693f83a09e07aade5aa556323b13e5e73ee3319c74eb150e48f1c4db74fe94daafc527007124699f14f449f26e5741594c5e56a75966856444f4e4b2aae4f0180248eee383d852ead750cdbc73f29bad368694a868f2402724fc87612ded2d451505a0bd9666aa9aa41783e26533288ff210d924a708a4a960a4e3db1d53b6a569521fbc5efe81adeb7ae0157652318fa719fbc8234bd5d8b5347738a2f8999e591bf0e43be0efc7c806907f84f6e3a069f522c7cb9c0ef35fd5fa414e9c741a24ceec2ffe3c9fd4c0dab7475eae7743255422180c4279a4d8738dc582fd58b7b73fd7dd9ffa854033a1e4703fdce74dfe99b34b4574d8300f24ff0089575456ad14fe5d2d3c9e70995833fa373af0303920039c0201ed9e7abbd2e457978b750ad6dd415ac7006218a7355a3f6cf52b12d557531956320ef8833328c938e580e3e87ebc0c5d5dac79c012b6fd0bd8113106dfea5a4a1a2a384832c80bbbaf2379396c1f71dcff004e8a8eae4e3c48a68dea62d60e3c455afa7cd6dc24c6024bb31f408b8e8de23a1b000115a54f8a62d1e70c7233f21e91d43c0969d8626d8fed15c757158ad6b5167b4a9cc9572c61649d7f2f9590460ff78f383c77c800a528e6cf734fcc0db34c3f1393f09150d1e9ff003adba768de5ae95fcd9bcafbd918b7e77662700e3f13103a291bfdd7b6044ecf5b52775a7dbf3e22c5ef50da745197cc9a2bcea7524a792c1e9e89b3b43b31ee41209c8e0e3b772f5555bab20636a7ee65a69f456dbdf85fdcc47baea6abd51571a25489659650b34fb400eef1c6adb06d0557eec03d8fabb633d42cb6be9aa43773e3fdcdef44fe9cbf5d9358c28fafe9f58cfe24780151358ad97da0b056ea6829c323d3dbd1e697c9915c0658d5833156689c6dce361c8209eb1add58facca5f1ccf6fe95d2b4e3474175e368dd8ef9fa7f78814df65a92b29ea1ab655b6d651c464345590d4433d43f01634431f19273b988c60e4803208dd70d4791907e625f5fd0ba7d550656c9f91e7ff93487847f645d53e10df2c75345aa296b2dd244ad78a356778257d9cb44a5786dd801bd276e73c1da73daeeb14eb1082b83e27da2d13d0c369e3ccd049a52288e4443764e3bfbf59737b1e099a30aabd84fc54e9c8e4866464299423728248e3db8efd496d2181cc832800913e6cf88de21eacd217ca8a4d31a5ea74750897c835373b70f8a797607f2f7481f61d9246db4127055b20363af4dd1d74d95efbecdc47807c4c8bd37b1dba74da3e38f314e8af9e2f5f6f629a2ba5e2592b0bccd2a991e1222552cfc0c61731a938e0b28f7c74efa9a1db85c7116bb41add3b7e2f198dba406a5baaf99a8ea0561915528a4098628325df202fa48d98272486078cf4de9c5582d579994ead73d6556d6f9c0d7479286df749b01aa27b84a90a8ee429d9bb1ee06cfdf1d3aa327022b410d6ae7b011527985a8f9bc2aae2250ddce7963fe43ae9e23bbf7769aae6d5f71d55e4a524325351c6774e94d3796db7b8ccc40dbdbb203900e0f443a55a3963c9fe769f9d9b4c947b9ce49fbfed173526be9ea0cd68d372180b4abf12f40de5f9800c3132919639dbf7872c707803bb7474fddf8970e3e7cfed2ce9d220516ea0f1e011fe2523aef59c36c864a2a201a566e4c5b9514ede18039c91bb8c939ce49f6eaf18fa0bf13f19b3e9ba06d430b6cfcbf0873c1bd734331b1daae2ce2b85c22459a4cb9a8df27b9c704640e7be07581eafa5b0eebc1ccf66e8ba9d3d28ba703699f4efc2ab4fc1e92b6c6ae1d563186230471c8fdf38fa63af22d5b96724cd3d49e90d9f08f8200171d57eef11ac09e308231d7098c29027034833d0f30c0ce2d480127ae169294e78e1f663d31e30d5adcea6aebad178545513d21492190a8214c90c8ac8580c0dc36be028dd818ead349d45f4dc019844b19015078fe73122d7e0555787da227b53eae925a0449e4aca89e9fd5246595f646a5cc54eb84018c718627d4181e4be9ad17580aae0995babdd77bad6ce3f69446adbed1e9ea5adbfcb4a82d824105b2963db179cbbb92be92146c0bf97b4638e703d3f474b2d4b58efdccf02d6d8fd57a8b535b7009e7e43b4a7a16fe305ae6ea2281c95a7a6524f97b8e422fcff1727b92493ce4f571808303bcb3b5853f82a7247731725d38fa86ff0035045549088632e1a5e17b8ce3f52dfb0ea2c30a23b4b6cac1f8cb8aaae173d7337c352d3a5bed3112b22c1f769b720af9849f5b7a4727dc67f5d1a515e946fb796f9f33c4d4d5a31b98ee63f7fd271d4f0ae9ad3937f0d076449bea2b947a47d378001ed93b4f23007bf4baeb2a2c5ad6c0f0231a0a6fd6dbbec1c78114a5fb366a9bd79d54d4fe5c31a979269e740aa064b12d9c7f5cfb7495dd5748c7f3666d68ea02b3e9a8e621dd34ec368a549682b7ce96324ad440d8c156fc68c3b8cf661d345a8d55395e44b6d36aed177b8627d35fb1e78a90f897e155baa1a6692be88fc0d709148613a22ee3f221810c319e1b1dc1ebc1fad68db4da965c707b4f67d05eba9a55bce399a19403f2eb35e331ef3c4f18b1d873d473260c8757574d4904b34d2aa4717e33f23f2c7cfe9f5e86630b93813ca0488180c6e19e460f41cc27690eb23f4f1d4d4f33e946f8eba9a9e8605b5d4d7476fa0652f5d50e42e231b4ed2cd85c104923b950401cf3afe8ba4f55fd6238f1f59e71fd59d61f4b49d26979b1c11c78fbfce60cf11f5c41e22ea38a99268e83495adcd353d4229123c5c0f3369192cfb381b7d23b8e093ec5a7a0d35e4fe63317d3742dd3a9f508cdafdff9f79f9a7b920b1cf768e209434eff00036ea62bc33632647fe6c7bfd4fd732f4f0d8fd602dabf10539c93c9ff00516a5a234d6fa658d5ea2e75a5aa6401f0c912928b96fe63bb8fa03fa85ce4c3596331da3b09a1b464fa56c56aa5b85e6a1eaeae4a68a6483cd52232c80b0f51c2a8ce3eb8fd93d56a2fb385ef3cf468dded2a060094efda4bc7ba7d61a626d2f6ba28a96884e9ba65fcfb1b23d409cfe1f974a57a76077b1e4cdbf49d08a1f79f844b93c65b96bbb8d96cf75b8d6de56a6aa049e1ab60d1a82406200c02d82403cf7f7eba6b4ad72a23c7a7b565ed518e389aa353f8cb65d31a66dd5b1db696bed7496e78162581256567d9b588638c06520ffe6eaa52a7b0b732aebd2da1c73c932aea0f0016bbc07835fd91a4b95ea465b955dbe9d4b79d1b3032222af2a5412700f60c3b91d41ee02cf4ec1c4bb5ea38bcd0c7044dbde017da234eea0d056c374bfc10153f0c95972ab4532300bb55dd9bd4ed9247bb053ee09389ea5d39e9b3720c89bde93d57d6534ea080c3b7cc7fb97c4f5623467546948fca98cff9903acf9033354a0345f6d60448e8d69b80653ec2239fa8c487a8b29f0446c5447308c372f88a549844d133286f2a5c2b2fd0e33cf4b118389de603d477b5b5da6b6b6aeba96dd454f11966aba97091d3c6012f233b10a028e72700639e8f42977da064c1b1c0ce67cbafb57f8d9a7b5beaa5b2692aeaaba520aadf73bd4af88ee1202362c433cc49db737e22a0a80a016f5efe9fd05d562dbc633d87fb98dd79a5c815f8f32b5d2ba7aa7555ea9e8a9b6a6edc5a690612351cb3311d80c63f538ebd12c60bcccb6b7569a4a4bb77f1f3967d77c3576a6d3162a54353434cf0d30403264cb8dec71f31824f557733574bdbe7999ad1a93baeb3bb1fe08a7a4f52c1fdbdbadce2b7cb2509a614f1c7b4332a8d810b93e9dc550e71ee4e38e82738e61c815a056ef14b54f88776a8a0a7b7ae29208608e07dbde411a8552491f21dba90a867305a6d3d67dddc995dd6d5cf712ed2ca5821c283fe5d459668ab54403024bb62496caeb7dc689c3d4d35423e147a8306041c7b8e3f7fd7a4ec191245f72953348ea0b4d05c740cca5a587cf85e588b4efe542a24dcc850b60601209ef9e4f48520ab902511b46e520f6307681fb45dc3c3cd193e98b2d7254cd0cbb29c150aaa091920e0ee0067238cf7efcf51b74819b7342d9a316582f71881e9ed3a8fc1aa0b6dda1ab157a6aba45491d235dd4b50195c46776e28461581e091953c13b9470977b1bb89600d761f6f066d8f0d3eda16182ef4d62d6372a5d3130a4e45c2a51605903260090e0a8656246fe30060fcf27d43a3109ead23334fd075d7b39a6f6ca81c13f197dd66bcd2f6ed3ffda7abbe5ba8ac6c8927f149eb91290ab1f4b798cc130491839e73d650d166768539fa4dd0b71dcf1339f8ebff0048ef86be152351e9e9d7c41be7a4ad3d9aa9451805b077d500ea0e012022bfb03b739eacb4bd1751a8e5c6d1f3102fab45e1793313f8bdf6acd75e3cd959350d753d3d9269d27a6b15ba311c1115076b3372f29e7f3b15046400475e99d3ba2697443d403737c7ff005325abd6dda8709d80f1f195b68eb14fa82f51c30234cd9c22a804b31c9c0c9193c138cfb7b75aaa70bc9f129b55a94d3565dccbf214b5e8b87f8145549354d4441eef571b02b0a20ddf0ea47b96ca96e0927b6700304b38de7ed308a6ed7bfaf70c2e7da3e39f3fea2d56ea26b24135e51961acac919208f3ea48f3b988fdb6e71ee7e5d075183595f947c8f70ad7b0c1fbc89e1d6a7a6d3b5130944645521918c848e148098c7bf32e47e9f4e967c15530b7292726246a79a290a0317099fc47279edd1d7b45744a57cc4e558a39e469372c641da546429fff003a0be019a0cee5c03cc314f54ba3e8e3b90a9867b8499f229d42c810738918f23391c2f7f7e30320081cfca4555b50db3181085bbc69aefecc565aae28d54f32cab1ced290cbbc1073c1cf273edfe98efa4aadb8423f4d02c0eb146c7739ad97186b62f590795247f4eff3edd7cdf39676d02c4d999695378db4ce9252cb51590dba6c79b6d9cfc4c1211db2ad81c6063b918efd56be99739f329d7436d7c798ade315cadb7ea5b2545bea1aaeba380c15929ddebd8711b7a80fc9b531ec235ebb5ab2a9532d7a7d4cac4b0ef2ab786478da376211465177701895cf1fa67a0b5499ced1344b9ec4ceb1515342f1d3a379b552f772388d719271f4009ebe2b185c0e64dd395127c534b2c9ba8637c319e4db14796f7e0b30e49289ea2338c77e8a8ec83bc4b52808e3bfef34a59ab69349e8da492de59ae35f1b4af5de4081fca6e5446809f294ae0900ee63cb1f6eb47a5a4940ef3cdefa6cd66acfadf9571c673fafc64ab5e98af1470d2792a6baf2d1ba46586f5881cae4f6c3b1ce3ff0c1c723a65dd793e04eea35750c95ecb2b2f14751c351ad66b5d336ea7b4c4287cc8fd2ace8486383c8c9ef9f71d529bb73e4cb9d068cb69bd56eedcfda4abe696aad3161ff00b4e29696bea6a2234e922904c221f319c11dd1bcf88a9ecc06467da2972de3721e20ae4fc6da3c0872d94b6895a7abb87decfb8ec8dc064ee4763dff00af4c331c71337ef4002c8fa86b63a48562a38a9c2d40da23f295942fbb6dc633dbdbe7d2e72df9a3fa6dd8c93cc5a8f4c515cbe1e9e7a799b7b88e3781c6fdc781c1183c9edc7ea3afbd5db2d2bb2c53953395abc258b54deda86c971f8850db0cf50a234ce71c6ddd919cf3f4e86fa9451968e9d558a3dc233eb8fb2a6add0da4ea3501a8a1b8dbe1c19968e57696152400c559178c9ee338f7c0e7a5135d55adb44ed1af5b1f6b0c4a929234d4a3e1f7086ea80ec7380b38f91f7dff00ea3ebd189f8cd1a286e6408ab27a4252688caa386539cf5c264c281da13a2b1c7a80eca5a7969988c992a9d5631f5cf7ff002e82e711945dfc091abb4c5369cb7cf553d69a8af2cc918a7188f04e3209e4e464f61c1ebe5c910fb768e4c31a3bc3caa964b7adce32b14b3f9cd0b1c1f28005bdb8242e3f523e7d1a94f5ac54f9c4f5a7fe369d9cf73c0978d82d73eadd452fa7cbb75bd05455f96767970a8fc2bedb881851db2573c75a4b9856a11679c6a6c5d35200eed1faa654d25a22fbaf2b30925140ad4506edf82e4a27e2fcaab8c739fc3faf551a9b4922a5f1de656a0757aa5d1a7c79997bc2eb6b6b2bddc6e971065860f32e55680e5e63b86235cf72f23a2ffb5d56927c4f5bd515d269d6b41f003f4857575dcdc6a692923ba4f72a4b6d3252435150dea38197c6e04ecdc485070422a020631d348028c012ba9ace0d968e4c937979a8aa1c48c1c0273818cfec07561907bccf53507821efa8d2c6db1c320c020fd7f5ea0ea3c47528dbe67aa350d2cb4ce924127c43295f3548f7cfb67a5193319442a7399d34b7880fa20c52521944a879211483fbf40b285b0608876ad9cf27f9fa4b16abed93ab2db68921a0482199d760a8920472b9f7008c67aaf1d3aa0dbe4d3a76e6049fdccce9053cb74b8c34d11559aa1d554b1c004f624e0f6fa0e9f6cf89a251b44927523974c97965c0dd5128cc99c7b73c01f3efc6723b0fb984542c798cb4e0d1d9e5ab53b9ca6727be4f7e86cb98f2aed1c464b2e95a7b143fc56ecab5b5911060f2cfa22423d2369c027be49fe9d0cb6702375d6157737263278730cdab6e3256cd28f8b9e7f8085987a625ca9ce3df97fd78faf571a25158773dc76984fea4ea1e90c30ce07ef2f2d5360a6a1d4761f0fede1a2822845c6ecf2b6e5ac566ca283df8064c8e07af8e00c72ab59c3daddc769e6156a2c7d2ddd46de5bb2fc8fc7e1e0450fb745ce5b4e8fb1e9ba7fb8a68c34d32260ac92831296cf739dcff00d028eab6a0763d87b997dfd1b40b2f7bbc8e07d79c9946da63a3b17823493796ff00c46ed726532a631e44310250e7b12d267b1ced1db8e84a72799bf6636eb886fcaa38fae7e9f08ab1df77401a960544cf2d272c7bf456bb60edccb65ab71e67ffd90d0a2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971580d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2266696c6553697a65220d0a0d0a373732390d0a2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971580d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2266696c654d4435220d0a0d0a39303865643932313735636533633632653337633030343432326463646130390d",
"0a2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971580d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d226368756e6b4c656e677468220d0a0d0a310d0a2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971580d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d226e6f774368756e6b496e646578220d0a0d0a300d0a2d2d2d2d2d2d5765624b6974466f726d426f756e6461727946377a6b494378433553624b666971582d2d0d0a"
};
String[] data = data1;
client.connect(testAddress).onComplete(onSuccess(so -> {
so.write(data[0]).onComplete(onSuccess(v1 -> {
so.write(Buffer.buffer(ByteBufUtil.decodeHexDump(data[1]))).onComplete(onSuccess(v2 -> {
so.write(Buffer.buffer(ByteBufUtil.decodeHexDump(data[2]))).onComplete(onSuccess(v3 -> {
vertx.setTimer(1, id -> {
so.write(Buffer.buffer(ByteBufUtil.decodeHexDump(data[3]))).onComplete(onSuccess(v4 -> {
}));
});
}));
}));
}));
}));
await();
}
I also found that it was netty decoder problem , but I don't know why this weird bug occurs 😂.
what happens is that when a part is parsed until \r it happens, e.g
---- ....
part
....\r
then you have the next chunk
\n---- ....
...
the parser will take a branch which has a bug
See https://github.com/netty/netty/issues/12729
Thank you.
Closing as this isn't vert.x related.