[Bug] "Buffer too small" with long command arguments
Version Information
Cmder version: 1.3.20
Operating system: Windows 8.1, Windows 10
Cmder Edition
N/A
Description of the issue
Any specific reason why args buffer size is:
- based on MAX_PATH
- specified with a seemingly arbitrary value?
https://github.com/cmderdev/cmder/blob/v1.3.20/launcher/src/CmderLauncher.cpp#L129
ConEmu runs everything as intended, working until cmd starts chomping commands after 8191 characters.
Cmder simply stops working thanks to args buffer limited size (total 776 with MAX_PATH=260). Which is not difficult to exceed when you are forwarding long(-ish) runlists to ConEmu. And since by default Cmder prepends, alongside /title, path-dependent /Icon flag command length at which problem occurs varies.
Debug assertion with a "Buffer too small" message from UCRT comes from here:
https://github.com/cmderdev/cmder/blob/v1.3.20/launcher/src/CmderLauncher.cpp#L445
How to reproduce
λ 1 - Set up
Since build.ps1 was iffy here is a from-scratch step-by-step version. This one uses Debug build. The actual Cmder path and build path will matter for next steps, as mentioned, so building Release in Release folder will require different test commands. Run as administrator.
C:
git clone https://github.com/cmderdev/cmder.git C:/cmder
cd C:/cmder
git checkout v1.3.20
cp "C:\cmder\launcher\src\version.rc2.sample" "C:\cmder\launcher\src\version.rc2"
sed -i '12s/#define CMDER_MAJOR_VERSION {Cmder-Major-Version}/#define CMDER_MAJOR_VERSION 1/' C:\cmder\launcher\src\version.rc2
sed -i '13s/#define CMDER_MINOR_VERSION {Cmder-Minor-Version}/#define CMDER_MINOR_VERSION 3/' C:\cmder\launcher\src\version.rc2
sed -i '14s/#define CMDER_REVISION_VERSION {Cmder-Revision-Version}/#define CMDER_REVISION_VERSION 20/' C:\cmder\launcher\src\version.rc2
sed -i '15s/#define CMDER_BUILD_VERSION {Cmder-Build-Version}/#define CMDER_BUILD_VERSION 0/' C:\cmder\launcher\src\version.rc2
sed -i '16s/#define CMDER_VERSION_STR {Cmder-Version-Str}/#define CMDER_VERSION_STR "1.3.20"/' C:\cmder\launcher\src\version.rc2
msbuild "C:\cmder\launcher\CmderLauncher.vcxproj" /t:Rebuild /p:Configuration=Debug /p:Platform=x64 /p:OutputPath=C:\cmder\launcher\x64\Debug
curl -Lo "C:/cmder_mini.zip" "https://github.com/cmderdev/cmder/releases/download/v1.3.20/cmder_mini.zip"
7z x C:\cmder_mini.zip -oC:\cmder_mini
robocopy /E "C:\cmder_mini\vendor" "C:\cmder\launcher\x64\Debug\vendor"
mkdir "C:\cmder\launcher\x64\Debug\config"
✔ 2.1 - Test 1
"C:\cmder\launcher\x64\Debug\Cmder.exe" /X "-runlist cmd /Q /V:ON /K echo Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris mollis dolor massa, quis commodo urna ullamcorper ut. Maecenas aliquam magna ac ipsum mattis interdum. Nam cursus sem ultricies, varius risus vel, placerat massa. Ut nec molestie elit, ut fermentum urna. Curabitur ut dapibus metus. Phasellus mollis consectetur massa, eget pellentesque sapien vehicula nec. Nunc volutpat in odio volutpat mattis. Maecenas eu condimentum lorem, sed dictum nulla. Nullam rhoncus elementum neque, ac consectetur tellus sollicitudin nec. Phasellus dictum ante eget ex efficitur lobortis. Praesent vestibulum libero sem, id molestie quam porttitor at. Suspendisse id odio lacinia, eges"
translated in the launcher to:
"C:\cmder\launcher\x64\Debug\vendor\conemu-maximus5\ConEmu64.exe" /Icon "C:\cmder\launcher\x64\Debug\icons\cmder.ico" /title "Cmder" -runlist cmd /Q /V:ON /K echo Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris mollis dolor massa, quis commodo urna ullamcorper ut. Maecenas aliquam magna ac ipsum mattis interdum. Nam cursus sem ultricies, varius risus vel, placerat massa. Ut nec molestie elit, ut fermentum urna. Curabitur ut dapibus metus. Phasellus mollis consectetur massa, eget pellentesque sapien vehicula nec. Nunc volutpat in odio volutpat mattis. Maecenas eu condimentum lorem, sed dictum nulla. Nullam rhoncus elementum neque, ac consectetur tellus sollicitudin nec. Phasellus dictum ante eget ex efficitur lobortis. Praesent vestibulum libero sem, id molestie quam porttitor at. Suspendisse id odio lacinia, eges
\______ args buffer starts here with a space before /Icon and ends with terminating zero == 776 <= MAX_PATH * 2 + 256
✘ 2.2 - Test 2
"C:\cmder\launcher\x64\Debug\Cmder.exe" /X "-runlist cmd /Q /V:ON /K echo Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris mollis dolor massa, quis commodo urna ullamcorper ut. Maecenas aliquam magna ac ipsum mattis interdum. Nam cursus sem ultricies, varius risus vel, placerat massa. Ut nec molestie elit, ut fermentum urna. Curabitur ut dapibus metus. Phasellus mollis consectetur massa, eget pellentesque sapien vehicula nec. Nunc volutpat in odio volutpat mattis. Maecenas eu condimentum lorem, sed dictum nulla. Nullam rhoncus elementum neque, ac consectetur tellus sollicitudin nec. Phasellus dictum ante eget ex efficitur lobortis. Praesent vestibulum libero sem, id molestie quam porttitor at. Suspendisse id odio lacinia, egest"
translated in the launcher to:
"C:\cmder\launcher\x64\Debug\vendor\conemu-maximus5\ConEmu64.exe" /Icon "C:\cmder\launcher\x64\Debug\icons\cmder.ico" /title "Cmder" -runlist cmd /Q /V:ON /K echo Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris mollis dolor massa, quis commodo urna ullamcorper ut. Maecenas aliquam magna ac ipsum mattis interdum. Nam cursus sem ultricies, varius risus vel, placerat massa. Ut nec molestie elit, ut fermentum urna. Curabitur ut dapibus metus. Phasellus mollis consectetur massa, eget pellentesque sapien vehicula nec. Nunc volutpat in odio volutpat mattis. Maecenas eu condimentum lorem, sed dictum nulla. Nullam rhoncus elementum neque, ac consectetur tellus sollicitudin nec. Phasellus dictum ante eget ex efficitur lobortis. Praesent vestibulum libero sem, id molestie quam porttitor at. Suspendisse id odio lacinia, egest
\______ args buffer starts here with a space before /Icon + terminating zero == 777 > MAX_PATH * 2 + 256
Lorem Ipsum used for testing for completeness sake; length == 8206
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris mollis dolor massa, quis commodo urna ullamcorper ut. Maecenas aliquam magna ac ipsum mattis interdum. Nam cursus sem ultricies, varius risus vel, placerat massa. Ut nec molestie elit, ut fermentum urna. Curabitur ut dapibus metus. Phasellus mollis consectetur massa, eget pellentesque sapien vehicula nec. Nunc volutpat in odio volutpat mattis. Maecenas eu condimentum lorem, sed dictum nulla. Nullam rhoncus elementum neque, ac consectetur tellus sollicitudin nec. Phasellus dictum ante eget ex efficitur lobortis. Praesent vestibulum libero sem, id molestie quam porttitor at. Suspendisse id odio lacinia, egestas quam in, ultricies eros. Nulla dapibus quam ut lacus feugiat, in lobortis justo tincidunt. Nunc semper scelerisque ligula at ornare. Proin facilisis arcu sit amet diam rhoncus dapibus. Curabitur et mi elementum, efficitur mi vitae, aliquam neque. Morbi erat odio, iaculis a lorem id, tempor accumsan diam. Morbi non neque sed arcu pellentesque porttitor sit amet non purus. Nulla rutrum ante eu nibh auctor, ac lacinia quam faucibus. Vestibulum rutrum vulputate rutrum. Morbi a ex eget justo luctus pellentesque ultrices ac justo. Donec id justo vestibulum, scelerisque ligula eu, fermentum nulla. Quisque a massa erat. Sed pretium hendrerit enim malesuada ullamcorper. In hac habitasse platea dictumst. In quis diam gravida, aliquam mauris ut, mattis risus. Proin laoreet nulla ut faucibus consectetur. Quisque suscipit tempor accumsan. Vestibulum vestibulum urna at magna viverra gravida. Aliquam condimentum convallis est. Proin eget felis vitae sem tincidunt fringilla vitae ac dui. Mauris euismod velit tincidunt posuere rhoncus. Duis neque ipsum, malesuada at dictum blandit, molestie vitae nisl. Integer tellus mauris, facilisis et ipsum eu, aliquet placerat ligula. Sed eleifend mauris non libero finibus, in tincidunt diam pretium. Morbi nec tortor orci. Aliquam id volutpat sapien. Nullam sit amet mauris et orci condimentum suscipit. Phasellus non ornare justo, id eleifend mauris. Proin ornare suscipit dolor, vel fringilla mauris ultricies in. Sed et justo velit. Integer tristique laoreet dui. Cras nec volutpat neque. Vestibulum tempor lectus sed consectetur iaculis. Vestibulum cursus, nisi et egestas volutpat, dui lacus tincidunt diam, nec vehicula nulla eros eget elit. Donec pellentesque diam non elit imperdiet laoreet. In elit ex, vehicula in bibendum varius, commodo eget mauris. Etiam auctor porttitor neque, eu pulvinar leo blandit ac. In vel suscipit nunc. Fusce elit ante, mollis sed eros sed, facilisis vehicula velit. Phasellus consectetur erat at lorem mollis fringilla. Ut finibus augue sit amet risus pulvinar, sit amet bibendum lorem semper. Morbi pellentesque lectus justo, vel egestas est faucibus in. Ut lobortis sapien eu tellus convallis interdum. Nulla facilisi. Nam elementum volutpat dignissim. Duis finibus ante nec ante ornare, ut sagittis neque faucibus. Integer sit amet tempor ex, sed consequat nisl. Praesent in lorem tristique, hendrerit erat eget, porttitor nisi. Fusce tristique ex vel felis sodales, a ultricies risus commodo. Phasellus aliquet risus ac mi pretium, vitae congue erat scelerisque. Suspendisse potenti. Duis ut rhoncus tellus, ut laoreet felis. Pellentesque fermentum lectus a eros pharetra, id auctor magna lobortis. Fusce ut orci accumsan urna pellentesque porta dapibus id ipsum. Pellentesque at iaculis felis. Quisque cursus finibus pharetra. Aenean venenatis ligula a hendrerit consectetur. Vestibulum ullamcorper eleifend tellus. Praesent eget consectetur felis. Duis maximus orci vitae metus rhoncus blandit. Nulla maximus ornare nulla dignissim bibendum. Nulla magna urna, dignissim at consectetur ac, scelerisque nec velit. Phasellus id tellus condimentum, congue libero maximus, iaculis augue. Donec ac elit porta, sodales urna eget, vestibulum sem. Quisque ac lobortis ante, quis interdum tellus. Etiam pharetra id mi a placerat. Proin posuere feugiat massa, vel blandit lectus aliquet sed. Sed lobortis sem eget nunc blandit finibus eu a elit. Fusce nulla nisi, placerat sit amet mauris in, condimentum scelerisque felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin sit amet erat quis erat suscipit posuere sed eget turpis. Nam in fringilla est, maximus pellentesque urna. Nullam consequat ex non augue rutrum interdum. Sed ut sem convallis ligula ornare ultrices vitae vitae diam. Ut mattis tincidunt massa et gravida. Quisque aliquam libero ac gravida suscipit. Nam non condimentum quam. Etiam consectetur suscipit velit, sit amet egestas massa luctus sit amet. Aliquam erat volutpat. In condimentum leo eu neque finibus, vel elementum eros malesuada. Vivamus vulputate in turpis et ullamcorper. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae libero accumsan arcu cursus laoreet a sed nibh. Vivamus rutrum blandit neque, vel ullamcorper dolor tempor dictum. Morbi placerat, ex at aliquet fringilla, nisl velit ornare felis, vitae laoreet neque dolor eu massa. Maecenas ornare dolor at erat lobortis faucibus. Aliquam vitae vulputate tellus, sed molestie quam. Donec ante orci, pretium non scelerisque quis, interdum et nisi. Sed auctor vel mauris id viverra. In hac habitasse platea dictumst. Mauris eget aliquam libero, ac dapibus dui. Vestibulum nec dui at mauris auctor congue. Proin feugiat tortor ac placerat tempor. Quisque pharetra purus ut vehicula ultricies. Cras bibendum vulputate enim, ut ultricies magna. Nunc et consequat metus. Sed id ligula vitae elit volutpat suscipit. Mauris nec dapibus magna. Sed sed rutrum nulla. Aliquam ex ipsum, commodo eu diam at, finibus cursus diam. Aenean fringilla, tortor ac iaculis vehicula, urna lacus posuere ante, vel facilisis sem nibh ac metus. Aenean pulvinar dapibus sapien non faucibus. Suspendisse vel nisi erat. Nullam egestas, enim cursus imperdiet tincidunt, sem purus semper lectus, in imperdiet quam massa ut diam. Sed gravida dapibus augue id bibendum. Vestibulum mollis erat sed nunc venenatis varius. Vestibulum tellus quam, luctus a tortor vitae, pellentesque consequat ipsum. Quisque mollis urna eu suscipit elementum. Donec fermentum risus non lectus efficitur, quis sodales tortor tincidunt. Quisque finibus sollicitudin pellentesque. Duis sit amet tempor nunc. Nullam elementum dignissim erat at aliquet. Vivamus in ultrices nisl, nec congue quam. Sed sagittis ipsum et eros mollis ultricies. Aliquam ullamcorper ex mi, at facilisis quam suscipit eu. Nulla a commodo libero, eget laoreet sapien. Aenean convallis, sem vitae vehicula luctus, mi nulla dictum ligula, ac convallis eros enim et elit. Maecenas finibus dui at purus molestie, eu laoreet dolor viverra. Nulla consectetur fringilla elit, a convallis ex porttitor nec. Sed mauris neque, pretium id sodales id, ullamcorper eu arcu. Vivamus ut enim volutpat, tempor ex quis, mollis diam. Aliquam sagittis sagittis nulla, ac mollis massa vestibulum vitae. Duis sem erat, fringilla ut nisi ac, tincidunt placerat nunc. Phasellus ac mattis felis. Proin sit amet ipsum et nunc molestie gravida et eu elit. In faucibus consequat porttitor. Duis ullamcorper elit dolor, et eleifend nulla dictum nec. Vivamus sed mauris malesuada, mollis tortor eu, dignissim magna. Curabitur non orci elementum, dignissim eros in, blandit quam. Nulla facilisi. Nulla nec mauris a velit tempus malesuada a vitae odio. Phasellus dictum velit a sapien scelerisque iaculis. Aenean porttitor sodales volutpat. Mauris pulvinar aliquam nisi quis tempor. Aenean sollicitudin, erat eget fermentum pellentesque, tortor sapien egestas metus, quis venenatis magna turpis vitae nunc. Integer ut mauris et turpis rutrum ullamcorper sed a lacus. Morbi id luctus leo. Nam a egestas purus, non tempus nunc. Quisque at molestie mi, non lobortis metus. Aliquam ullamcorper volutpat enim non tincidunt. Sed bibendum felis vel arcu aliquet, eget malesuada nisl convallis. Praesent id ipsum porta, vestibulum massa vitae, tristique lectus. Quisque vehicula dignissim turpis a tempus. Praesent interdum fringilla ex, in lobortis ligula luctus vitae. Quisque ornare at nibh eget massa nunc.
Additional context
No response
Checklist
- [X] I have read the documentation.
- [X] I have searched for similar issues and found none that describe my issue.
- [X] I have reproduced the issue on the latest version of Cmder.
- [X] I am certain my issues are not related to ConEmu, Clink, or other third-party tools that Cmder uses.
Have you tried:
"C:\cmder\launcher\x64\Debug\Cmder.exe" -- -runlist cmd /Q /V:ON /K echo Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris mollis dolor massa, quis commodo urna ullamcorper ut. Maecenas aliquam magna ac ipsum mattis interdum. Nam cursus sem ultricies, varius risus vel, placerat massa. Ut nec molestie elit, ut fermentum urna. Curabitur ut dapibus metus. Phasellus mollis consectetur massa, eget pellentesque sapien vehicula nec. Nunc volutpat in odio volutpat mattis. Maecenas eu condimentum lorem, sed dictum nulla. Nullam rhoncus elementum neque, ac consectetur tellus sollicitudin nec. Phasellus dictum ante eget ex efficitur lobortis. Praesent vestibulum libero sem, id molestie quam porttitor at. Suspendisse id odio lacinia, eges.......
I have. With the same result.
Cmder.exe is not a shell it is a launcher for ConEmu.exe.
-
It enables some unique things for Cmder interactive shells launched by Conemu Tasks.
- PRIMARILY on very first launch of Cmder after download of a new Cmder version.
-
It also provides a Cmder icon vs. the one supplied by
Conemu.exe
It was not intended to be an all purpose ConEmu.exe wrapper.
I am not making excuses, just explaining the use case and thought process behind its design.
Just curious so I have to ask the following questions.
You actually use command lines with cmder.exe longer than 260 characters?
What for?
There is probably no advantage to using Cmder.exe to launch a tab vs. using ConEmu.exe to run a runlist.
I am prototyping an automation tool that just happens to launch ConEmu through Cmder with a specific state. That does currently involve using /C and /X flags. Of varying lengths. That does also mean that I do care about Cmder first or n-th launch main- and side-effects, whatever they are and will be. Otherwise I would have to reimplement them and maintain them myself.
So yes, I intend to use commands with cmder.exe longer than x characters, anything goes. On paper the capability is there, without any asterisks, so why not. Unless there is white text in the command help popup, wouldn't be able to tell :)
Do not count on /x it has other issues which is why -- [conemu commands] syntax exists.
/x should be deprecated and not used.